2011-01-14 21 views
5

Para aprender qué es y para qué se utiliza un combinador de punto fijo, escribí el mío. Pero en lugar de escribirlo con funciones estrictamente anónimos, como Wikipedia's example, sólo se utiliza defino:Y Combinator en Scheme usando Define

(define combine (lambda (functional) 
        (functional (lambda args (apply (combine functional) args)))) 

He probado esto con los funcionales para factorial y de Fibonacci, y parece que funciona. ¿Cumple esto con la definición formal de un combinador de punto fijo?

+0

Ejercicio 2: Combinador Y sin usar 'define' o' letrec' :) – leppie

Respuesta

3

La respuesta es no, porque de acuerdo a the blog referred to in the previous answer, que ni siquiera cumple con la definición de combinador, ya que 'combinar' es un país libre variable.

+2

Gracias por señalar eso. Solo para asegurarse de que la definición del blog es correcta, ¿la considera equivalente a la definición de Wikipedia: "Un combinador es una función de orden superior que usa solo aplicaciones de funciones y combinadores definidos anteriormente para definir un resultado a partir de sus argumentos"? Ver http://en.wikipedia.org/wiki/Combinatory_logic – AlcubierreDrive

5

EDITAR: Mientras chessweb o cualquier otra persona corrobora su respuesta, considere temporalmente su respuesta correcta y esta incorrecta.


Parece que la respuesta es sí. Al parecer, aparece el mismo combinador exacta here, a medio camino abajo de la página:

(define Y 
    (lambda (f) 
     (f (lambda (x) ((Y f) x))))) 
+0

No deberías. Le invitamos a responder sus propias preguntas. IIRC puede aceptar su propia respuesta en 2 días después de haberla dado. –

+0

@Yasir Genial, gracias! – AlcubierreDrive

+1

El principal objetivo de enseñar el combinador en Y es ver cómo puedes * implementar * la recursión con solo funciones. Al escribir una definición recursiva, no puede hacer eso, por lo que termina con algo que funciona, pero solo es útil para entender lo que Y se supone que debe hacer. El texto de Mike sería un buen lugar para leerlo en profundidad y ver cómo se deriva la versión 'define'-less. –