2009-08-14 7 views
8

S, K ve I kombinatorlerini kullanarak boş bir liste nasıl yazılır?

(cons [p] [q]) is ((s ((s i) (k [p]))) (k [q])) 
(car [lst]) is ([lst] k) 
(cdr [lst]) is ([lst] (k i)) 

Bu

(cons [a] (cons [b] (cons [c] [nil]))) 

gibi bir liste yazmak istiyorum Bu böyle bir şey olacak:

((s ((s i) (k [a]))) (k ((s ((s i) (k [b]))) (k ((s ((s i) (k [c]))) (k [nil])))))) 

Ama bilmiyorum S, K ve I kombinatorlerine 'sıfır' derleme. Kimse biliyor mu?

Şimdiden teşekkürler, Edwin Jose Palathinkal

+0

Buna bir göz atmak isteyebilirsiniz: http://www.cs.bath.ac.uk/~ gam23/teaching/ProgrammingIII/10lambdaprogramming.pdf – Pinochle

cevap

8

Bir nil gösteriminden gereken tek şey bunu tespit edebilmek için - nil için "doğru" ve "yanlış" döndürür bazı null? yüklem yazmak diğer tüm çiftler. Bu, cevabın doğru/yanlış temsiline bağlı olduğu anlamına gelir. λxy.x ve λxy.y'un ortak tercihi ile nil için uygun bir kodlama λf.[true]'dur. Bunu SKI'ye çevirmek artık çok kolay (ve ev ödevine benzediğinden beri burada yapmayacağım ...).

(Ayrıca, nil bu temsilini verilen null? yüklemi uygulayan iyi bir egzersizdir.)

+0

Bu cevap için teşekkürler. Edwin Jose Palathinkal. – louzer

İlgili konular