donné une liste de chiffres, disons, (1 3 6 10 0)
, comment calculer les différences (x i - x i-1), à condition que vous avez x -1 = 0?Comment calculez-vous correctement les différences par paire dans Scheme?
(le résultat dans cet exemple devrait être (1 2 3 4 -10)
)
J'ai trouvé que cette solution soit correcte:
(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)
Cependant, je pense qu'il devrait y avoir plus élégant que solution non moins flexible. C'est juste moche. Je suis novice en programmation fonctionnelle et j'aimerais avoir des suggestions sur le code.
Merci.
Vous ne pouvez pas utiliser LIST pour une variable, car Scheme est un Lisp-1. – Svante
Étonnamment, le code fonctionne, si vous supprimez la liste ((liste atom)) – ansgri
'comme variable fonctionne très bien tant que vous n'avez pas besoin d'appeler la fonction nommée' liste. L'observation se produit - s'habituer à cela. :) (liste atom) ne devrait être nécessaire que pour une liste incorrecte (qui ne se termine pas par zéro), ce qui n'arrive presque jamais. –