華麗にrev.curry
インストールは前回した。今回こそサンプルプログラムを動かす。
というわけでTerminalを起動。
ダウンロードしちゃう
$curl -LO http://www.informatik.uni-kiel.de/~mh/curry/examples/rev.curry
cyiを起動する。
$cyi
と打ち込むと、cyiが起動してPreludeというモジュールがロードされる(>まではプロンプトなので勝手に出る)。
(ヘルプ「:h」によると)ここで任意のモジュールを動かすには「:l MODULE」(MODULEはモジュール名)とすればいいらしい。
Prelude> :l rev.curry /usr/local/bin/cyc-0.9.11 -c rev.curry -o rev.o rev>
revがロードされた。「goal1」とか打ち込むと実行されます。
rev> goal1 [1,2,3,4] rev> goal2 [4,3,2,1] rev> goal3 [10,9,8,7,6,5,4,3,2,1] rev>
revはリストを逆にするので、これで正解なのですが、このgoal1とかどうやって定義するのか。ファイルの中身を見てみます。編集は「:e」で、viが起動します(素のシェルでの「vi rev.curry」と同様)。
(viが無理な人は、現在のフォルダ(cdしてなければ「~」なので、「/Machintosh HD/Users(ユーザ)/(ユーザ名)」フォルダ)をFinderで開いて、さっきダウンロードしたrev.curryを適当なテキストエディタで開く。)
-- Concatenating two lists:
-- (predefined as `++' in the standard prelude)
append :: [t] -> [t] -> [t]
append x = x
append (x:xs) ys = x : append xs ys
-- Reverse the order of elements in a list:
rev :: [t] -> [t]
rev = []
rev (x:xs) = append (rev xs) [x]
goal1 = append [1,2] [3,4]
goal2 = rev [1,2,3,4]
goal3 = rev [1,2,3,4,5,6,7,8,9,10]
-- end of program
「--」はコメントっぽい。閉じるのは「:q」、編集した場合は「:x」で保存終了。
cyiにコピペして実行してみた。
rev> goal1 = append [1,2] [3,4]; line 1.7: Unexpected token `='
はだめ。
rev> append [1,2] [3,4] [1,2,3,4]
これはいける。
ゴールの右辺はそのままで実行できるけど、イコールは受け付けない。らしい。