2012-03-21 1 views
2

Je vole aveugle sur le régime, et je me sens comme une fois que je réponds à cette question le reste de mes devoirs devrait progresser en douceur.Absolute première fois en utilisant le schéma, Simple manipulation de la liste

Je définis une fonction qui prend une liste comme seul argument, puis retourne la même liste avec le premier élément ajouté au reste. Par exemple:

(addFirst ‘(4 3 2 1)) => (8 7 6 5) 

J'ai le sentiment que je devrais utiliser la carte et les fonctions voiture ici ... mais je juste ne peux pas obtenir exactement droit. Ma version actuelle de ce code ressemble à:

(define (addlist x) ;adds the first element of a list to all other elements 
    (define a (car x)) ;a is definitely the first part of the list 
    (map (+ a) x) 
) 

Comment puis-je faire le travail de la fonction d'ajout de cette façon? Évidemment je ne peux pas fournir une liste comme paramètre, mais devrais-je réutiliser la voiture ou la récursivité?

Bon, pour la postérité, voici le complété, correct, le code formaté:

(define (addlist x) ;adds the first element of a list to all other elements 
    (define a (car x)) ;a is definitely the first part of the list 
    (map (lambda (y) (+ a y)) x) 
) 
+1

Fait intéressant, dans votre première tentative, vous semblez penser comme un programmeur Haskell, où l'expression '(+) A' vraiment n'évalue à une fonction qui ajoute' à son argument a'. – gcbenison

Répondre

8

Carte prend une fonction et n listes. Vous avez donc besoin de transformer (+ a) en une fonction qui prend un argument (comme vous voulez mapper sur une liste).

(map (lambda (item) ... do something to add a to item ...) x) 
+0

Vous avez parfaitement raison, je l'ai juste compris. Je vais poster le code complété comme une réponse, merci encore. – Ryanman

+0

Pas de problème. Scheme heureux! (ou serait-ce Scheming?) –

+0

Donc je ne peux pas répondre à ma propre question pendant 8 heures de plus. – Ryanman

Questions connexes