Question

Ok cela peut sembler une question ridicule, mais comment revenir-vous une liste dans le schéma.

Pas de solution correcte

Autres conseils

Sur la base de voir quelques-unes de vos questions, je pense que vous pouvez avoir du mal à obtenir votre tête enveloppée autour des concepts centraux à un langage fonctionnel tel que le schéma.

Au niveau vous apprenez Scheme (novice), toutes les fonctions que vous écrivez a une entrée et une sortie, et le corps de chaque fonction est une seule expression. Quelle que soit la valeur que l'expression est évaluée à renvoyée par la fonction. Il n'y a pas besoin de « revenir » explicitement tout comme vous le feriez dans un langage impératif comme Java ou C; il se trouve comme conséquence directe d'évaluation de l'expression.

Le corps d'une fonction est une expression unique. Il est pas comme Java où le corps d'une méthode consiste en une série d'instructions:

do this
then do that
then do something else
then return something (maybe)

Schéma de fonctionnement évaluent une seule expression; rien de plus. Voici une fonction simple qui ajoute 5 à ce que le numéro est passé comme argument:

(define (add5 x)
  (+ x 5))

Le corps de la fonction est (+ x 5), qui est juste une expression à évaluer. La valeur de x est branché, la fonction de + (addition) est appliqué à x et 5, et le résultat est renvoyé.

Les listes ne sont pas très différents. Tout ce que vous avez besoin est une expression qui construira une liste. Deux ont déjà été mentionnés: Liste est utilisé pour construire une liste à partir de zéro si vous avez déjà tous les éléments; contre est utilisé pour ajouter un seul élément à une liste existante et est souvent utilisé de manière récursive.

Voici une fonction qui consomme un certain nombre n et construit la liste (n n-1 n-2 ... 0)

(define (makelist n)
  (if (= n 0)
     (list 0)                       ; base case. Just return (0)
     (cons n (makelist (- n 1)))))  ; recursive case. Add n to the head of (n-1 n-2 ... 0)

Dans les deux cas, la base et récursives, une liste est renvoyée en évaluant simplement une expression qui utilise l'une des fonctions de création de liste.

Voici un autre exemple. Celui-ci utilise notre fonction add5 d'ajouter 5 à chaque élément d'une liste des numéros (LON):

(define (add5list lon)
  (if (null? lon)
    `()                 ; base case: lon is empty. Return an empty list.
    (cons (add5 (car lon)) (add5list (cdr lon)))))  ; recursive case.
                                                    ; Add 5 to the head of lon and prepend it to the tail of lon

Encore une fois, la base et les cas récurrents sont des listes en évaluant les expressions reviennent qui se traduisent par des listes.

L'essentiel à retenir sur le schéma est toutes les fonctions renvoient quelque chose, et que quelque chose est tout simplement le résultat de l'évaluation d'une expression. Le corps d'une fonction Scheme est une seule expression.

Vous voulez sans doute simplement: '(2 3 5 7 11) ou (list 2 3 5 7 11)

?

Vous pouvez aussi construire des listes en spécifiant un élément et une liste pour l'ajouter à: (cons 2 (cons 3 '()))

Voici un exemple de retour une liste d'une fonction:

(define returnlist 
  (lambda(a b c) 
    (cons a (cons b (cons c '())))
))

(returnlist 2 3 4)

Valeur de retour sera la liste: (list 2 3 4)

Une autre façon de le faire pas si bien connu:

> ((lambda x x) 2 3 5 7 11)
(2 3 5 7 11)

qui est, la fonction « liste » lui-même peut être définie comme:

> (define list (lambda x x))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top