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