8
votes

Schéma Comment retourner plusieurs valeurs?

Je remarque que presque toutes les fonctions de schéma ne peuvent renvoyer qu'une liste en tant que sortie.

Dans ce qui suit, je souhaite renvoyer plusieurs valeurs de tous les nœuds adjacents de voisins. P>

(define (store l w)
  (values (write l)
          (write w)
          (newline)
          (list (+ 1 w) l)
          (list w (+ 1 l))))


2 commentaires

Saviez-vous que vous pouvez poster une réponse à votre propre question? (Si vous aimez avoir des points sur le débordement de la pile. :)


merci d'avoir souligné cela, ne réalisais pas que je peux faire ça


3 Réponses :


2
votes

Vous pouvez retourner une paire de valeurs dans une cellule de client: xxx

Vous pouvez généraliser cela pour renvoyer plusieurs valeurs dans une liste, aussi


2 commentaires

Merci, je viens de trouver une meilleure façon, utilisez "Valeurs" Je peux renvoyer n'importe quel nombre de valeurs de retour que je veux :) (Définissez (Store LW) (valeurs (écrire L) (liste Whecline) (Liste (+ 1 W) l) (Liste W (+ 1 L))))


Et ce n'est pas imprimé assez bien, surtout si vous stockez des paires ou des listes dans votre voiture / CDR.



11
votes

Les valeurs, la suite du style de passage et la liste sont d'au moins trois manières de renvoyer plusieurs valeurs:

(import (rnrs))


; let-values + values
(define (foo1)
  (values 1 2 3))

(let-values (((a b c) (foo1)))
  (display (list a b c))
  (newline))

; cps
(define (foo2 k)
  (k 1 2 3))

(foo2 (lambda (a b c) 
        (display (list a b c))
        (newline)))

; list
(define (foo3)
  (list 1 2 3))
(let ((result (foo3)))
  (display result)
  (newline))


1 commentaires

Le problème est que le nombre de valeurs de retour varie, la liste est vraiment la seule option viable.



3
votes

L'implémentation de la guil du schéma a une syntaxe , qu'elle indique "beaucoup plus pratique" que valeurs . Je ne l'ai pas encore utilisé, mais cela peut être utile:

http://www.gnu.org/software /Guile/Manual/html_node/multiple-values.html


0 commentaires