SML

GeSHiにSMLのsyntax highlightがマージされた

だいぶ前に書いてpull reqestしておいた、SMLコードのGeSHi用syntax highlight設定が本家にマージされてました。やったー。 support StandardML syntax #6 GeSHiはphpで書かれた汎用syntax highlighterで、言語毎に正規表現(のキモイ拡張)の塊を持っています…

SMLの規格書が公開されていた

SML

気付いてなかったのですが、いつの間にか StandardML'97 の規格書がgithubで公開されています*1 > SMLFamily/sml97 手元のCentOSでビルドところ、ちゃんとroot.pdfが生成されました。 (app (yum install) ["texinfo", "texinfo-tex"]; latexmk(unzip _; ins…

SML/NJで実行ファイルを作る

SML

タイトルはやや詐欺なのだけど。 SML/NJで実行ファイル、というか、型検査とコンパイル*1が終わった状態のファイルが欲しいことがある。 ソフトウェアをバイナリ配布するとか。あるいはベンチマークを取りたい(=パースや型検査の時間を入れたくない)場合が考…

SML#2.0.0リリース

SML

来ました> http://www.pllab.riec.tohoku.ac.jp/smlsharp/ja/?Download大きな変更としてバックエンドが今までの手書きから(?)LLVMに置き換わっています。 多少構文の修正もありそうですが、新機能は特にアナウンスされてません。(というかドキュメントの公開…

build SML/NJ 110.76 on Cygwin 1.7

SML

いつの間にかcygwin上で SML/NJ がビルド出来なくなっていた。(いつからだろう? 具体的には base/runtime/mach-dep/cygwin-fault.c で参照されているヘッダ が消えているのでエラーとなっています。 現時点での最新版を含む SML/NJ 110.7{6,5,4} と cygwin …

aobenchによるSMLベンチマークを書いた

SML

aobenchというのはアンビエントオクルージョン(AO)というアルゴリズムを使用したレンダリングを行う、浮動小数点数計算のベンチマークです。 オリジナルはC言語の400行に満たない小さなプログラムです。これをSMLに移植して実行時間のベンチマークを行いまし…

実数の表示方法によって精度が足りないように見えることがある

プログラマのための数学#2を眺めていました。途中から(あまりにもメジャーな処理系である)SML#とNJをいじり始めて聞いてませんでしたけど…。 で、いきなりバグ見つけて混乱したり。 序 で、本題です。SMLの実数型であるReal.realがIEEE754準拠であることが…

libpcreのSML#バインディングを公開しました

SML

pcre は Perl Compatible Regular Expressions の略で、Perl互換の正規表現ライブラリです。 SML#からこのライブラリを使うラッパーを書いたので公開しました > https://github.com/eldesh/pcre_sharp 基本的なマッチの機能と、subpatternにマッチした部分…

なごや2013(夏)まとめ

8/25,26でなにやらイベントが連続していたので行ってきました。 ProofSummit2013 OCamlMeeting2013 なごやまつり 後続のせいでかなり地味な印象になってしまったけど(^^、聴いて意味があったのは前半。 OCamlSummit 期待していた Generic Pretty Printer は…

SML版 factの最小不動点を調べる

SML

圏論勉強会#9 Haskellによるfactの最小不動点の説明 のSML版です。講義中では「Haskellの遅延評価が〜」と何度も繰り返されてましたが、fixを使う前の undefined を使う定義ではSMLでも(この場合は)同様の結果が得られます。 ただし引数を合わせる必要があり…

SMLでの時刻の扱い

SML

便乗。さすがにSML/NJだと普通に出来る。 $ rlwrap sml Standard ML of New Jersey v110.72 [built: Tue Aug 24 10:47:04 2010] - Time.now(); val it = TIME {usec=1371522289223904} : Time.time - Date.fromTimeLocal(Time.now()); val it = DATE {day=18…

DeBruijn変換がやっと分かった

算譜工論(DeBrujn変換) を読んでDeBruijn変換をSMLで実装してみました。> https://gist.github.com/eldesh/5714388 文書内の説明がほとんどMLのコードまんまなのでほとんど単なる写経なのですが。 ちなみに、これによってどんな嬉しい性質があるのかはまだ…

SMLUnitの出力をTAP形式にするテストランナーを書いた

SML

SMLUnitをSML#0.90からサルベージでgithubに上げたユニットテストライブラリに、TAPTestRunnerを実装しました。(githubリポジトリ(tap_supportブランチ)) TestRunnerというのは、SMLUnitを使って定義されたテストを実行して結果をダンプしてくれるモジュール…

サンプルでなんとなく理解するmllex

SML

やむを得ず調べてしまったので動く状態のサンプルを書き留めておきます。(タイガー本で書いたヤツとか忘れたわー(ノ`´)ノミ┻┻) mllexとは mllexはlexのSML版です。トークンに対応する正規表現を並べておくと、それをストリームから切り出すレキサ(字句解析…

datatype replication declarations の紹介

SML

SMLの地味な機能を紹介。簡単な使用例をあんまり見かけないのでマイナーな機能だと思います。(大学の授業ではやらないとは思う)まともな説明はこれくらいか>SML/NJのドキュメント(Datatype replication declarations)名前は似てますがSML#のリプリケーショ…

SML#のファンクタ引数の罠っぽい挙動

SML

あまりにも書くことがないので SML#(1.2.0) でハマッた挙動を書いておきます。 バグなのか仕様なのかちょっと判断に迷います。(githubに書くのは緊張するのです(;´∀`) ) 実装が以下。 structure T を受け取り、Sという別名を付けるだけのファンクタです。 …

SMLUnitをSML#0.90からサルベージ

SML

年明けて初めの記事ですね。今年もよろしくお願いします。 早速ですがSML#プロジェクトで開発されたユニットテストフレームワークであるSMLUnitをgithubにインポートしました(https://github.com/smlsharp/SMLUnit)。 昔はSML#のソースコードと一緒に配布さ…

SML# - C言語バインディング まとめ (ML/LL AdventCalendar20日目)

この記事は LL/ML Advent Calendar #LLAdventJP 20012/12/20の参加記事です。 出来心でRTした次の瞬間には犠牲に参加することになっていました。なごやこわい。 注意:この記事では SML#1.2.0 を使うものとしています。 SML# にはC言語バインディングをサポ…

ストリームではまった

SML

SML(というかML)界ではストリームと言えば 'a -> ('a, 'b) option こんな型が定番なようです。 これは標準ライブラリでも ('a,'b) StringCvt.reader として定義されています。*1 私が公開しているMsgPack-SMLでも、バイトシーケンスを渡すとmsgpackデータが…

SML#のコミッタになっていた

SML

仕事で使うことを目論んでSML#コンパイラタンをいじめ優しく検証する穏やかな日々…。(報告した不具合らしき現象) Owners have full access to all repositories and admin rights to the organization. View team: https://github.com/organizations/smlshar…

unfoldで配列の生成

SML

SMLの標準ライブラリには、配列を扱うモジュールとして Array と Vector があります。 これらのデータ構造を構築するために標準に用意されている関数は val tabulate : int * (int -> 'a) -> 'a array (* or vector *) これだけです。インデックスを受け取っ…

SML版QuickCheck環境を構築する

Haskellには QuickCheck というテストフレームワークが存在します。 これは、テスト対象の関数の入力型が取りえる値をランダムに自動生成し、別に与えた性質(関数)を満たすかどうかをチェックしてくれるライブラリです。 指定された型の取りえる値の中からコ…

関数プログラミングの楽しみ 練習問題用リポジトリ作った

https://github.com/eldesh/fun_of_programmingThe Fun of ProgrammingというHaskellの薄い本があります。和訳版として 関数プログラミングの楽しみ という本も出版されています (私が読んでるのはこっち…(^^))関数プログラミングの楽しみ作者: Jeremy…

rand(3)を使ってSML# にSML/NJのRandを実装

SML

Basisに乱数無いのは何故なのか?(これ書くの多分3回目くらい) というわけで(?)、SML#でC言語のライブラリのインポートを試しつつSML/NJが提供している乱数のストラクチャ]を定義してみました。 (* * Rand : RAND (SML/NJ library clone) * * http://www.sm…

SML#でオーバーローディング!

SML

SMLでは、型システムがオーバーロードをうまく扱えないため、基本的にオーバーロード不可能なのですが、 トップレベルに公開されている一部の数値演算(関数)は特別扱いで、オーバーロードされています。(OCamlではこの特別扱いを撤廃してるのが特徴的です。…

SML#1.0をコンパイル

SML

Win7(32bit, cygwin)上へのインストール方法。 コンパイラは普通に動作します。インタプリタはすぐ落ちてしまいますが…。*1 window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementBy…

fisher yates アルゴリズムで配列シャッフル

ローカルリポジトリを掃除していたらFisher-Yates法 の実装が見つかりました。 コミットのついでに紹介します。このアルゴリズムを使うと配列が O(n)時間 でシャッフル出来ます。 local fun swap xs i j = (* swap xs[i] xs[j] *) let val tmp = A.sub (xs, …

SMLでZipListを作る

本物のプログラマはHaskellを使うで紹介されているZipListを定義してみました。 この型を使うと、zipWithN をその場で組上げることが出来ます。(といっても最初にタプルのコンストラクタ渡すんですが) 型の定義 まず *モト* となる型を定義します。 signatur…

SMLでApplicativeを書く

コードはcodeplexに置いてあります。 (sml/njでuse "applicative.use"; するとApplicativeなOptionが使えます)) http://www.haskell.org/ghc/docs/latest/html/libraries/base/Control-Applicative.html を参考にしました。 とりあえず下のレイヤから書いて…

SML/NJ インタプリタの表示設定を変更する

SML

SML/NJのインタプリタは, 入力した式の評価結果をいい感じに表示してくれるので便利ですが, 複雑なデータは適当に省略されて表示されてしまいます.たとえばこんな感じ. - val xs = List.tabulate (15,fn x=>x); val xs = [0,1,2,3,4,5,6,7,8,9,10,11,...] : …