2016-09-30 2 views

Antwort

3

Wenn Sie es in diesem Stil schreiben wollen, funktioniert dies:

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

Notiere die * vor der rekursive Aufruf an inc, dies sagt, um die Ergebnisse in die Liste zurückzuspleißen - benötigt, weil inc eine Liste selbst zurückgibt. Eine Alternative wäre, diese zweite Funktion zu schreiben, wie folgt, die + für Liste concatentation verwendet:

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

Ein Standard-Weg, dies in Rascal zu schreiben mit einer Liste Verständnis wäre, wie:

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

Die Bibliothek List enthält auch eine Funktion namens mapper, mit der Sie Funktionen über Listen abbilden können. mit, dass Sie dies als schreiben konnte:

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

wo xs eine Liste von ganzen Zahlen ist.

Verwandte Themen