#lambda #calculus
#лямбда #исчисление
Вопрос:
Я пытаюсь добавить одно число в список в лямбда-исчислении, и я изо всех сил пытаюсь найти какие-либо отработанные примеры с использованием церковных цифр, не мог бы кто-нибудь, пожалуйста, указать мне направление некоторых примеров добавления списка в лямбда-исчислении
Ответ №1:
Для моделирования алгебраических типов данных в лямбда-исчислении я бы рекомендовал кодировку Скотта. У Кванга есть хороший пост в блоге по этому поводуhttps://kseo.github.io/posts/2016-12-13-scott-encoding.html.
Вот некоторые haskell, которые соответствуют вашему варианту использования.
-- model as adt in haskell
data List a = Nil | Cons a (List a)
-- apply scott encoding
data ListS a r = ListS (forall r. r -> (a -> ListS -> r) -> r)
-- make constructors
nil :: ListS a
nil = ListS (n c -> n)
cons :: a -> ListS a -> ListS a
cons x xs = ListS (n c -> c x xs)
или в чистом лямбда-исчислении
nil = n c -> n
cons = x xs n c -> c x xs