2011-01-14 2 views
5

Чтобы узнать, для чего используется и используется комбинатор с фиксированной запятой, я написал свой собственный. Но вместо того, чтобы писать его строго анонимные функции, как Wikipedia's example, я использовал только определить:Y Комбинатор в схеме с использованием Define

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

Я проверил это с функционалов для факториала и Фибоначчи, и это, кажется, работает. Соответствует ли это формальному определению комбинатора с фиксированной запятой?

+0

Упражнение 2: комбинатор Y без использования 'define' или' letrec' :) – leppie

ответ

3

Ответ: нет, потому что в соответствии с the blog referred to in the previous answer, она даже и не отвечают определению комбинатора, так как «объединить» является свободным переменная.

+2

Спасибо, что указали это. Просто чтобы убедиться, что определение блога верное, считаете ли вы его эквивалентом определения Википедии: «Комбинатор - это функция более высокого порядка, которая использует только приложение-функцию и ранее определенные комбинаторы для определения результата из своих аргументов».? См. Http://en.wikipedia.org/wiki/Combinatory_logic – AlcubierreDrive

5

EDIT: Хотя Чессвеб или кто-либо другой подтверждает его ответ, временно рассмотрите его ответ правильно, и это неправильно.


Кажется, что да. По-видимому, точно такой же комбинатор появляется here, на полпути вниз страницы:

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

Вы не должны. Вам предлагается ответить на ваши собственные вопросы. IIRC вы можете принять свой собственный ответ через 2 дня после того, как вы его дали. –

+0

@ Ясир Отлично, спасибо! – AlcubierreDrive

+1

Основная идея преподавания Y-комбинатора заключается в том, чтобы увидеть, как вы можете * реализовать * рекурсию с помощью только функций. Написав рекурсивное определение, вы не можете этого сделать - так что вы закончите что-то, что работает, но оно полезно только для понимания того, что должен делать Y. Текст Майка был бы хорошим местом, чтобы подробно прочитать об этом и посмотреть, как получается версия 'define'-less. –

Смежные вопросы