Liste mit 2 Elementen in ein gepunktetes Paar umwandeln?

7

F: Wie kann ich eine Liste mit zwei Elementen in eine consZelle mit gepunkteten Paaren konvertieren ?

Ich kann eine Liste mit 2 Elementen in ein gepunktetes Paar konvertieren mit:

(let ((list '(1 2)))
  (cons (car list) (cadr list)))        ; => (1 . 2)

Ich blende: Gibt es eine eingebaute Funktion, die dies tut, oder sollte ich meine eigene rollen?

Dan
quelle
5
Schamloser Stecker: Schlagen Sie vor, ist in solchen Fällen großartig. Setzen Sie Ihre Eingabe als '(1 2), Ihre Ausgabe als '(1 . 2)und es wird (apply #'cons '(1 2))für Sie vorschlagen !
Wilfred Hughes

Antworten:

11

consmacht aus zwei Argumenten eine Nachteile-Zelle. applyverwendet eine Liste als Argumente für eine Funktion. Wenn sich ihre Kräfte kombinieren: (apply #'cons x)Konvertiert eine Liste mit zwei Elementen in eine Nachteile-Zelle (ohne in der Liste herumstöbern zu müssen) und löst einen Fehler aus, wenn die Liste nicht 2 lang ist.

erikstokes
quelle
Es ist fantastisch, wie dies sowohl präziser ist als auch die richtige Fehlerbehandlung beinhaltet.
Daniel Jour