1
如何在Rascal中的列表上編寫遞歸函數? 我希望像下面這樣的工作,但如果你希望把它寫在這種風格,這將工作它不如何在Rascal函數定義中使用列表遞歸
list[int] inc([]) = [];
list[int] inc([int H, *int T]) = [H+1,inc(T)];
如何在Rascal中的列表上編寫遞歸函數? 我希望像下面這樣的工作,但如果你希望把它寫在這種風格,這將工作它不如何在Rascal函數定義中使用列表遞歸
list[int] inc([]) = [];
list[int] inc([int H, *int T]) = [H+1,inc(T)];
:
list[int] inc([]) = [];
list[int] inc([int H, *int T]) = [H+1, *inc(T)];
注意*
前面遞歸調用inc
,這表示將結果重新拼接到列表中 - 因爲inc
本身返回列表。另一種方法是寫此第二功能如下,它使用+
爲列表concatentation:
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
是一個整數列表。