2009-08-14 5 views
8

S, K 및 I 연결자를 사용하여 빈 목록을 작성하는 방법?

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

이 목록을 작성하고 싶습니다.

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

: 다음과 같이됩니다.

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

그러나 잘 모르겠습니다. S, K 및 I 결합 자에 '무'을 컴파일하는 방법. 아는 사람 있나요?

미리 감사드립니다. Edwin Jose Palathinkal

+0

당신이보고 싶을 수 있습니다 http://www.cs.bath.ac.uk/~ gam23/teaching/ProgrammingIII/10lambdaprogramming.pdf – Pinochle

답변

8

당신이 nil 표현에서 필요한 유일한 것은 그것을 식별 할 수있다 - nil에 대한 "진실"을위한 "false"를 반환 일부 null? 술어를 쓰기 다른 모든 쌍. 즉, 답은 참/거짓 표현에 따라 다릅니다. λxy.xλxy.y의 공통 선택으로 nil에 대한 편리한 인코딩은 λf.[true]입니다. 이것을 SKI로 번역하는 것은 매우 쉽습니다 (숙제처럼 보이기 때문에 여기서는하지 않겠습니다 ...).

은 (또한, nil이 표현을 주어진 null? 조건을 구현하는 좋은 운동입니다.)

+0

이 답변을 주셔서 감사합니다. Edwin Jose Palathinkal. – louzer