41 lines
907 B
Prolog
41 lines
907 B
Prolog
church_zero(z).
|
|
|
|
church_successor(Z, c(Z)).
|
|
|
|
church_add(z, Z, Z).
|
|
church_add(c(X), Y, c(Z)) :-
|
|
church_add(X, Y, Z).
|
|
|
|
church_multiply(z, _, z).
|
|
church_multiply(c(X), Y, R) :-
|
|
church_add(Y, S, R),
|
|
church_multiply(X, Y, S).
|
|
|
|
% N ^ M
|
|
church_power(z, z, z).
|
|
church_power(N, c(z), N).
|
|
church_power(N, c(c(Z)), R) :-
|
|
church_multiply(N, R1, R),
|
|
church_power(N, c(Z), R1).
|
|
|
|
int_church(0, z).
|
|
int_church(I, c(Z)) :-
|
|
int_church(Is, Z),
|
|
succ(Is, I).
|
|
|
|
run :-
|
|
int_church(3, Three),
|
|
church_successor(Three, Four),
|
|
church_add(Three, Four, Sum),
|
|
church_multiply(Three, Four, Product),
|
|
church_power(Four, Three, Power43),
|
|
church_power(Three, Four, Power34),
|
|
|
|
int_church(ISum, Sum),
|
|
int_church(IProduct, Product),
|
|
int_church(IPower43, Power43),
|
|
int_church(IPower34, Power34),
|
|
|
|
!,
|
|
maplist(format('~w '), [ISum, IProduct, IPower43, IPower34]),
|
|
nl.
|