Преобразование лямбда-выражения в схему

У меня есть это лямбда-лямбда-выражение: λx.(λy.(λz.x(yz)))

Я пытаюсь написать из него выражение Scheme.

Я сделал это:

(define (f x)(lambda(y z) (f (y z))))

Это правильно? Если нет, то что я делаю неправильно?


person Community    schedule 18.09.2011    source источник


Ответы (1)


Я не совсем уверен в этой нотации лямбда, но я думаю, вам нужно это:

(define (f x) (lambda (y) (lambda (z) (x (y z)))))

и вы можете использовать его так:

(((f sqrt) 1+) 3)
2.0
person Karoly Horvath    schedule 18.09.2011
comment
Я использую Win 7 и DrRacket: я ввожу (define (f x) (лямбда (y) (лямбда (z) (x (y z)))))) и нажимаю Enter, и все в порядке. Но когда я пытаюсь использовать его, как вы предложили, я получаю: ссылку на идентификатор перед его определением: 1+ Можете ли вы объяснить, почему? - person ; 19.09.2011
comment
@endif: 1+ в Racket называется add1. - person Matthias Benkard; 19.09.2011
comment
Привязки к 1+ в Racket нет. Попробуйте использовать add1. - person John Clements; 19.09.2011