s, k 및 i combinator를 사용하여 빈 목록을 작성하는 방법은 무엇입니까?
-
16-09-2019 - |
문제
나는 그것을 알고있다 :
(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
좋은 운동입니다.)
제휴하지 않습니다 StackOverflow