Viết một thuật ngữ trên phép tính lambda thuần túy mà khi áp dụng vào danh sách các số được mã hóa của nhà thờ , trả về nó với các số được sắp xếp theo thứ tự tăng dần hoặc giảm dần. Danh sách và số của nhà thờ phải được mã hóa thành các nếp gấp cho các ADT thông thường của họ:
-- 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))))
Ví dụ đầu vào:
(λ 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)))))
Ví dụ đầu ra:
(λ 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)))))
Điểm của bài nộp sẽ được tính như sau:
score(x) = 1
score(λx.t) = score(t) + 1
score(t s) = score(t) + score(s) + 1
Điểm số thấp nhất chiến thắng.