1.一些斐波那契数列和阶乘的实现。
fib(1, 1).
fib(2, 1).
fib(N, R) :- N1 is N-1, N2 is N-2, fib(N1, R1), fib(N2, R2), R is R1+R2.
jc(1, 1).
jc(N, R) :- N1 is N-1, jc(N1, R1), R is N * R1.
2.实现一个汉诺塔问题。
3.翻转一个列表中的元素。
reverse([Head|[]], Head).
reverse([Head|Tail1], [Tail2|Head]) :- reverse(Tail1, Tail2).
4.找出一个列表中的最小值。
min([N1,N2], R) :- N1 > N2, R is N2.
min([N1,N2], R) :- N1 < N2, R is N1.
find_min([N], N).
find_min(List, R) :- List=[Head|Tail], find_min(Tail, R2), R is min(R2, Head).
5.对一个列表中的元素进行排序。
利用上面的方法:
sort(List, R) :- List=[Head|Tail], sort(Tail, R2), Min=find_min(List), append(Min, R2, R).
PS.先写了后试了下成功了,不过感觉规则有问题,而且之后测试发现同大小数字会被忽略只剩1个。