문제

나는 그것을 알고있다 :

(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]))))))

그러나 나는 'nil'을 s, k 및 i combinator로 컴파일하는 방법을 모른다. 아는 사람 있나요?

Edwin Jose Palathinkal에게 미리 감사드립니다

도움이 되었습니까?

해결책

당신이 a에서 필요한 유일한 것 nil 표현은 그것을 식별 할 수있는 것입니다. null? "true"를 반환하는 술어 nil 다른 모든 쌍의 "거짓". 이것은 대답이 당신의 true/false 표현에 의존한다는 것을 의미합니다. 일반적인 선택과 함께 λxy.x 그리고 λxy.y, 편리한 인코딩 nil ~이다 λf.[true]. 이것을 스키로 번역하는 것은 지금 매우 쉽습니다 (그리고 숙제처럼 보이기 때문에 여기서하지 않을 것입니다 ...).

(또한 구현 a null? 이 표현을 감안할 때 술어 nil 좋은 운동입니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top