2012-01-25 15 views
11

Dado que (lista 1 2 3) rendimientos (1 2 3) y (cotización (1 2 3)) rendimientos (1 2 3), ¿cuál es la razón de ser de ambos?¿Por qué Scheme tiene tanto lista como cita?

Dado que Scheme es, por lo demás, tan sobrio, estos deben tener alguna diferencia significativa. ¿Que es eso?

+0

"Dado que Scheme es tan sobrio" - Puede que le interese saber que 'list' es en realidad una forma derivada que se puede definir por Scheme:' (define (list. Objs) objs) ' –

Respuesta

27

En el ejemplo que mencionó quote y list tienen el mismo resultado porque las constantes numéricas se evalúan a sí mismas. Si utiliza expresiones que no son auto-evalúan en la lista (ejemplo, las variables o llamadas a funciones), verá la diferencia:

(quote (a b c)) le dará una lista que contiene los símbolos a, y bc mientras se (list a b c) darle una lista que contiene los valores de las variables a, b y c (o un error si las variables no existen).

+0

OK Veo ese. Gracias. – drb

5

La lista crea una lista, por lo que (lista 1 2 3) crea una lista de tres elementos.

La cita impide la evaluación. Sin cita, la expresión (1 2 3) se evaluaría como la función 1 invocada con los argumentos 2 y 3, lo que evidentemente no tiene sentido. La cotización impide la evaluación y simplemente devuelve la lista, que se especifica literalmente en su forma externa imprimible como (1 2 3).

Cuestiones relacionadas