Pure言語邪道テクニック? Whileを作る
この方法はあまり使うべきではないと思いますが、Pure言語で手続き型言語的なプログラムを書く方法として書いておきます。
まず最初に、While関数の定義です。
while expr body = body () $$ while expr body if expr (); = () otherwise;
普通に、「exprを実行してtrueだったらbodyを実行する」ということです。
exprとbodyは引数が一つの関数ですが、引数を与えているのは関数を実行させるためだけです。
次に、使い方の例として、「hogeという文字を10回出力する」というプログラムです。書き換えられる変数を使っています。
using system; let c = ref 0; while (\x -> get c < 10) (\x -> puts "hoge" $$ put c (get c + 1));
とても関数型言語のプログラムとは思えない書き方です。