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.