eine Liste von Zahlen gegeben, sagen wir, (1 3 6 10 0)
, wie berechnet man Unterschiede (x i - x i-1), vorausgesetzt, Sie haben x -1 = 0?Wie berechnen Sie richtig paarweise Unterschiede in Scheme?
Ich habe diese Lösung gefunden (das Ergebnis in diesem Beispiel sollte (1 2 3 4 -10)
sein) korrekt zu sein:
(define (pairwise-2 f init l) (first (foldl (λ (x acc-data) (let ([result-list (first acc-data)] [prev-x (second acc-data)]) (list (append result-list (list(f x prev-x))) x))) (list empty 0) l))) (pairwise-2 - 0 '(1 3 6 10 0)) ;; => (1 2 3 4 -10)
Aber ich denke, es sollte aber nicht weniger flexible Lösung eleganter sein. Es ist einfach hässlich.
Ich bin neu in der funktionalen Programmierung und würde gerne Vorschläge für den Code hören.
Danke.
Sie können LIST nicht für eine Variable verwenden, da Schema ein Lisp-1 ist. – Svante
Überraschenderweise funktioniert der Code, wenn Sie entfernen ((Atom? Liste) Liste) – ansgri
'Liste als Variable funktioniert gut, solange Sie nicht die Funktion namens' Liste aufrufen müssen. Shadowing passiert - gewöhne dich daran. :) (atom? List) sollte nur für eine falsche Liste (eine, die nicht in Null endet), die fast nie passiert. –