Как получить предшественника церковной цифры

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


person duby12    schedule 26.09.2010    source источник
comment
если это домашнее задание, пометьте его как таковое   -  person Muad'Dib    schedule 27.09.2010


Ответы (2)


предположим, вы хотите построить функцию, которая даст вам предыдущее число N. Вы должны использовать пары таких чисел, как это (0,1) (1,2) ....(n,n+1) и построить функцию succPair для перехода от (n-1,n) к (n,n +1), а затем вы применяете succPair N раз к (0,1) и на последнем шаге вы просто применяете snd к последнему описанному мной результату, а затем бум! вы получаете предварительную оценку N, посмотрите здесь, чтобы получить изображение http://m2-info-upmc.blogspot.fr/2012/11/predecesseur-sur-les-entiers-de-church.html

person benahm    schedule 16.02.2013

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

person John Doe    schedule 30.09.2010