Я практикуюсь с SML, и я выполняю небольшое задание, в котором мы должны реализовать числительные Черча, определенные как:
datatype 'a church = C of ('a -> 'a) * 'a -> 'a
пример вал
ZERO = C(fn (f,x) => x)
Я уже реализовал функции:
create: int -> 'a church
churchToInt: 'a church -> int
и SUC
, который возвращает преемника числительного Черча.
Теперь мне нужно реализовать функцию
PRED: 'a church -> 'a church * 'a church
который возвращает кортеж (предшественник, текущая цифра). Мне не разрешено использовать churchToInt
, я должен работать непосредственно с числительными Черча. По-видимому, это решается одной строкой путем передачи определенного аргумента.
Я думал просто использовать SUC
снова и снова, пока мы не найдем нужное число, но у меня нет возможности сравнить две цифры Чёрча. Я полностью застрял на этом.