Cómo escribir una lista vacía con S, K y yo combinadores?
-
16-09-2019 - |
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
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.)