Qual è l'analogia di una coppia tratteggiata in altre implementazioni Lisp?

6

Qual è il costrutto della coppia puntata di Scheme analogo a in altre implementazioni Lisp? Riesco a creare un vettore o un elenco abbastanza facilmente e a capire quelli in Clojure, anche se la sintassi è un po 'diversa, come i vettori di Clojure usano parentesi quadre [].

Tuttavia, vedere una coppia puntata per la prima volta mi ha gettato. Sembra quasi un'implementazione della mappa.

Non sto cercando una discussione, ma più per l'uso o l'equivalente della coppia puntata in altri dialetti Lisp, come Clojure o anche Python.

    
posta octopusgrabbus 16.06.2012 - 01:50
fonte

2 risposte

5

Common Lisp (implementazione: SBCL)

* (cons 1 2)

(1 . 2)
* (car '(1 . 2))

1
* (cdr '(1 . 2))

2

Sono abbastanza sicuro che sia il Common Lisp standard

Ecco alcuni Clojure:

Clojure 1.3.0
user=> (cons 1 2)
IllegalArgumentException Don't know how to create ISeq from: java.lang.Long  clojure.lang.RT.seqFrom (RT.java:487)
user=> (car '(1 . 2))
CompilerException java.lang.RuntimeException: Unable to resolve symbol: car in this context, compiling:(NO_SOURCE_PATH:2) 
user=> (cdr '(1 . 2))
CompilerException java.lang.RuntimeException: Unable to resolve symbol: cdr in this context, compiling:(NO_SOURCE_PATH:3) 
user=> '(1 . 2)
(1 . 2)
user=> (first '(1 . 2))
1
user=> (rest '(1 . 2))
(. 2)

In realtà non sono un esperto di Clojure (o un esperto di Common Lisp), ma non sono sicuro che Clojure abbia qualcosa che supporti un elenco errato (come '(a b . c) ) integrato.

    
risposta data 16.06.2012 - 03:08
fonte
8

Non ci sono coppie puntate in Clojure.

Un motivo filosofico per questo è che Clojure evita l'uso di una concreta struttura dati "a coppie" e sottolinea invece "sequenze" astratte che possono avere possibili implementazioni concrete.

Gli equivalenti più vicini sono list e cons :

;; construct a sequence by consing a value onto any sequential object (here a vector)
(cons 1 [2 3 4])
=> (1 2 3 4)

;; construct a list
(list 1 2 3 4)
=> (1 2 3 4)
    
risposta data 18.07.2012 - 10:23
fonte

Leggi altre domande sui tag