Tuliskan istilah pada kalkulus lambda murni yang tidak diketik, yang bila diterapkan pada daftar angka yang dikodekan oleh gereja , kembalikan dengan angka-angkanya yang diurutkan dalam urutan naik atau turun. Daftar dan nomor Gereja harus dikodekan sebagai lipatan untuk ADT mereka yang biasa:
-- Usual ADTs for Lists and Nats (in Haskell, for example)
data List a = Cons a (List a) | Nil
data Nat a = Succ (Nat a) | Zero
-- Their respective folds are the λ-calculus representation used on this challenge
church_list = (λ c n . (c ... (c ... (c ... n))))
church_num = (λ succ zero . (succ (succ (succ ... zero))))
Input contoh:
(λ cons nil .
(cons (λ f x . (f x)) -- 1
(cons (λ f x . (f (f (f (f (f (f (f x)))))))) -- 7
(cons (λ f x . (f (f x))) -- 2
(cons (λ f x . (f (f (f x)))) -- 3
nil)))))
Contoh output:
(λ cons nil .
(cons (λ f x . (f x)) -- 1
(cons (λ f x . (f (f x))) -- 2
(cons (λ f x . (f (f (f x)))) -- 3
(cons (λ f x . (f (f (f (f (f (f (f x)))))))) -- 7
nil)))))
Skor pengiriman akan dihitung sebagai berikut:
score(x) = 1
score(λx.t) = score(t) + 1
score(t s) = score(t) + score(s) + 1
Skor terendah menang.