Pregunta

Yo sé que:

(cons [p] [q]) is ((s ((s i) (k [p]))) (k [q]))
(car [lst]) is ([lst] k)
(cdr [lst]) is ([lst] (k i))

Quiero escribir una lista como esta

(cons [a] (cons [b] (cons [c] [nil])))

, que va a ser algo como esto:

((s ((s i) (k [a]))) (k ((s ((s i) (k [b]))) (k ((s ((s i) (k [c]))) (k [nil]))))))

Pero no sé cómo compilar 'nil' S, K y yo combinadores.¿Alguien sabe?

Gracias de antemano, Edwin Jose Palathinkal

¿Fue útil?

Solución

Lo único que necesita de una representación nil es ser capaz de identificarlo - escribir algún predicado null? que devuelve "true" para nil y "falso" para todos los otros pares. Esto significa que la respuesta depende de su representación de verdadero / falso. Con la elección común de λxy.x y λxy.y, una codificación conveniente para nil se λf.[true]. Traduciendo esto a esquiar es muy fácil ahora (y no voy a hacerlo aquí, ya que parece que la tarea ...).

(Además, la implementación de un null? predicado dado esta representación para nil es un buen ejercicio.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top