2012-05-25 4 views
3

Мне нужно устранить эту схему лямбда-схемы для моего школьного задания.Устранить лямбда в схеме?

Любые идеи, как это осуществить?

(define (foo x) 
(letrec 
    ((h 
    (lambda (y z) 
     (cond 
     ((null? y) 'undefined) 
     ((null? (cdr y)) (car z)) 
     (else (h (cddr y) (cdr z))) 
     )))) 
    (h x x)) 
) 

ответ

3

Ну, вы могли бы заменить lambda выражение в letrec с внутренним определением:

(define (foo x) 
    (define (h y z) 
    (cond 
     ((null? y) 'undefined) 
     ((null? (cdr y)) (car z)) 
     (else (h (cddr y) (cdr z))))) 
    (h x x)) 

... Или вы могли бы извлечь h процедуру вне foo, как процедура хелперов. В любом случае результат будет таким же.

+1

Я действительно не понимаю, почему они попросят их сделать это в задании. Похоже, что другой способ (видя, что внутреннее определение - 'letrec') более поучителен – newacct