プログラマーになりたい。

プログラミングや写真や本や読書会のことや、日常のこと。

華麗に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]

これはいける。
ゴールの右辺はそのままで実行できるけど、イコールは受け付けない。らしい。

Creative Commons License ©2007-2021 IIDA Munenori.