Я разработчик guile-log среды логического программирования на схеме guile, которая имеет как конструкции minikanren, так и конструкции prolog, и их можно смешивать.Она также имеет портированную библиотеку clpfd, поэтому здесь вы можете сделать следующее (к сожалению, это не работает (ошибка, над которой я работаю)).Предположим, что clpfd импортирован.(,, ;; чередует канрен как ops).Замена ,, с, и ;;с ;Вы получаете код, который может быть запущен, например, на прологе swi, используя библиотеку clpfd.
tarai(X,Y,Z,W) :-
(
X #> Y ,
(
(
((X #> 0 , XX #= X - 1, tarai(XX,Y,Z,RX)) ;;
(X = 0 , tarai(0,Y,Z,RX))) ,,
((Y #> 0 , YY #= Y - 1, tarai(YY,Z,X,RY)) ;;
(Y = 0 , tarai(0,Z,X,RY))) ,,
((Z #> 0 , ZZ #= Z - 1, tarai(ZZ,X,Y,RZ)) ;;
(Z = 0 , tarai(0,X,Y,RZ)))
) ,,
tarai(RX,TY,RZ,R)
)
) ;;
(X #=< Y, R=Y).