Как получить предшественника церковной цифры - PullRequest
1 голос
/ 27 сентября 2010

Я практикуюсь с 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 снова и снова, пока мы не наберем нужное число, но у меня нет способа сравнить две церковные цифры,Я полностью застрял на этом.

Ответы [ 2 ]

1 голос
/ 17 февраля 2013

предположим, что вы хотите построить функцию, которая даст вам предик N . Вы должны использовать пары по номерам вот так (0,1) (1,2) .... (n, n + 1) и построить функцию succPair перейти от (n-1, n) к (n, n + 1) и затем вы применяете succPair N раз (0,1) и последний шаг, который вы просто применяете snd к последнему результату, который я описал а потом бум! Вы получаете свой пред N Посмотрите здесь, чтобы получить картину

0 голосов
/ 30 сентября 2010

Вы должны были принудительно сделать это с помощью int в вашем subPred.

...