Ich arbeite in Guile und muss eine Prozedur verwenden, die in einem Paar gespeichert ist. Wenn ich car
in den folgenden Beispielen speichern:Speichervorgang in einem Paar (Schema/Guile)
(define pairA (cons 1 car))
(define pairB '(1 . car))
.. Ich kann nur das Verfahren aus dem ersten Ausdruck auszuwerten. Der zweite in ein Symbol eingeschaltet wird, vermute ich irgendwie wegen es in einem Paar zu sein, aber keine Liste:
>(display pairA)
(1 . #<primitive-procedure car>)
>(display pairB)
(1 . car)
Warum wird das erste Beispiel zurück car
als ein Verfahren, nicht aber die zweite? Der einzige Unterschied, den ich feststellen kann, ist, dass pairA
ist eine Liste/Paar, und pairB
ist nur ein Paar. Gibt es eine Möglichkeit, (cdr pairB)
als eine Prozedur zu verwenden?
Danke für die Erklärung! Ich konnte in den Dokumenten nichts über das Arbeiten mit Ausdrücken auf diese Weise finden, aber sehen Sie jetzt, wie es funktioniert. Wenn ich nicht ändern kann, wie die Liste aufgebaut ist, gibt es trotzdem "(1. Auto)" zu lesen, als wäre es quasi/nicht quoted? Ich arbeite mit einem Programm, das eine spezifische listenbildende Infrastruktur hat, die im Grunde genommen Benutzereingaben macht und eine Reihe von Alis macht, ohne zu überlegen, ob die Werte Prozeduren, Symbole, Zahlen usw. sind. –
@JefferySchivers Benutzereingabe kann nicht wirklich Funktionen angeben. Es sei denn, Sie möchten, dass "Auto" in der Benutzereingabe tatsächlich der "Auto" -Prozedur zugeordnet wird: In diesem Fall möchten Sie vielleicht eine Symbol-zu-Prozedur-Hashtabelle (oder Alist, falls klein). Der Alist würde so aussehen: '\ '((Auto., Auto) (cdr., Cdr) ...)'. (Dies ist ein bisschen schwierig in einem Kommentarfeld ausführlich zu erklären, aber ich werde glücklich sein zu versuchen, alles zu erklären, was Sie fragen.) –
Danke @Chris, das macht Sinn! Das Schreiben des Alist wie du zeigst funktioniert perfekt. –