2016-09-30 7 views
1

ラスカルのリストに対する再帰関数の書き方は? 私は仕事に次のようなものを期待していますが、このスタイルでそれを書きたい場合には、これは動作しますしませラスカル関数定義でのリスト再帰の使い方

list[int] inc([]) = []; 
list[int] inc([int H, *int T]) = [H+1,inc(T)]; 

答えて

3

ん:目の前で*

list[int] inc([]) = []; 
list[int] inc([int H, *int T]) = [H+1, *inc(T)]; 

注意incへの再帰呼び出しでは、結果をリストにスプライスする必要があります。incはリスト自体を返します。代替は、次のようにリストconcatentationため+を使用しており、この第2の機能を記述するために、次のようになります。

list[int] inc([int H, *int T]) = (H+1) + inc(T); 

ラスカルでこれを書くために、より標準的な方法として、リスト内包して次のようになります。

list[int] inc(list[int] xs) = [ x + 1 | x <- xs ]; 

Listライブラリには、mapperという関数もあります。この関数を使用すると、関数をリストにマップすることができます。それを使って、これを書くことができます:

mapper(xs, int(int x) { return x + 1; }); 

ここで、xsは整数のリストです。

関連する問題