당신은 그것에 프로그램! 교회 인코딩을 살펴보십시오 . 모든 산술을 얼마나 많이 수행 할 수 있는지 볼 수 있으며, 이것이 매우 강력하다는 것을 확신시켜 줄 것입니다. 그러나 목록에 대한 작업을보고 싶습니다. 가장 중요한 작업을 수행하는 함수와 관련하여 대부분의 데이터 구조를 정의 할 수 있습니다.
예를 들어, 목록의 인코딩은 그 위에 접히는 접기 기능입니다. 이것은 교회의 인코딩이 아니라 Percie의 유형과 프로그래밍 언어에서 얻은 것입니다. 교회의 쌍 인코딩은 우리에게 재귀를 제공하지 않습니다. 우리는 일종의 재귀 조합기로 다시 추가해야합니다.
따라서리스트에는 두 가지 인수, 즉 접기를 수행하는 함수와 어떤 시점에서 접기에 연결하는 초기 값이 필요합니다.
cons x xs = lam f. lam a. f x (xs f a)
nil = lam f. lam a. a
이제 add 함수가 주어지면 합계를 정의 할 수 있습니다 (위의 교회 인코딩 참조)
sum xs = xs add 0
더 많은 일을하고지도 기능을 정의 할 수 있습니다
consApply f x xs = cons (f x) xs
map f xs = xs (consApply f) nil
여전히 계산이 진행되고 있다고 확신하지 못하고 계산을 수행 할 수 있는지 확인 하려면 고정 소수점 조합기를 확인하십시오 . 때로는 생각하기가 다소 어려워서 직관적이라고 부를 수는 없지만 일부 인수로 수동으로 평가하면 무슨 일이 일어나고 있는지 알 수 있습니다.