J'ai commencé à apprendre un schéma, pour le plaisir, et parce que je n'ai jamais utilisé de langue fonctionnelle auparavant. J'ai choisi Schéma car je voulais lire SICP pendant une longue période.
Quoi qu'il en soit, je ' m en apprenant actuellement sur les listes et auparavant que j'ai appris sur les inconvénients, la voiture et le CDR. Et il y a un exemple qui crée une liste de listes avec des inconvénients, comme celui-ci: p> la liste résultante est ((1 2) 3 4), ce qui n'a pas de sens Pour moi, je m'attendrais à ce que ((1 2) (3 4)) soit le résultat (une liste faite sur deux listes). Pourquoi ça se comporte-t-il comme ça? Je me rends compte que si je devais utiliser une voiture, j'aurais (1 2) et le CDR J'aurais obtenu (3 4) parce que CDR revient toujours "le reste", mais je ne comprends pas pourquoi la liste n'est pas faite. de deux listes? p> p>
4 Réponses :
Vous obtenez une liste avec Ceci ressemble étroitement à la structure d'une liste: chaque nœud d'une liste (appropriée) contient un élément et une liste contenant tout autre élément. Si le deuxième argument sur Si vous souhaitez créer une liste de listes, utilisez (1 2) code> comme premier élément (la voiture) et
(3 4) code> comme le reste (le CDR) car le premier argument au contre est le premier élément de la liste et le deuxième argument est une liste contenant les éléments restants. P>
contre code> crée un de ces noeuds. P>
contre code> deviendrait le deuxième élément de la liste, comment créeriez-vous une liste avec trois arguments? Vous devriez faire
contre code> VariARDIC à quel point, ce serait un autre nom pour la liste
code>. P>
(liste (liste 1 2) (liste 3 4)) code>. p>
(1 2) code> est la voiture, pas le CDR, et
(3 4) code> est le CDR.
[ | ] X [ | ] 3 [ | ] 4 /
((1 . (2 . ())) . ((3 . (4 . ())) . ()))
Parce qu'une personne est pas em> une liste de deux éléments, les deux sont souvent confus. Si C'est pourquoi (a. B) code> est une cellule de client, alors
(a. (B. ())) Code> est une liste de deux éléments. Toute liste de sécurité La liste vide est spécifiquement une cellule de client dont le champ de la voiture contient le premier élément et dont le champ CDR contient la liste contenant les éléments restants. Une liste est donc simplement un arbre binaire dont la feuille droite est la constante spéciale
() code> ou
nil code> en fonction de votre dialecte. P>
(contre 0 '(1 2 3)) code> évalue vers
(0 1 2 3) code> et non
(0 (1 2 3) ) Code> Nous créons une cellule de client dont la voiture est
0 code> et dont le CDR est
(1 2 3) code>, donc une liste
(0 1 2 3 ) code>. p>
Cette question est légèrement différente, mais les réponses répondent avec précisément à votre question: Stackoverflow.com/questions/2921912/...
Pourquoi feriez-vous une liste avec des inconvénients lorsque vous avez précédemment effectué une liste avec la liste? Pourquoi ne pas rester en utilisant la liste des listes de fabrication? Les inconvénients ne font pas la même chose que la liste - c'est aussi pourquoi ils sont des fonctions différentes.