[英]How to write a prolog program for recursive subtraction
我想要一个 prolog 中的递归减法程序。
该计划的方案是
(define (sub m n)
(cond
((= n 0) m)
(else (sub (- m 1) (- n 1)))))
我需要将此程序转换为 prolog 程序..
虽然它没有实际用途,但从 Scheme 代码到相应的 Prolog 代码的更直接转换如下:
% mode: sub(+, +, -)
sub(A, B, C) :-
( B = 0 % if
-> C = A % then
; A1 is A-1, % else
B1 is B-1,
sub(A1, B1, C) ).
当Number
是Expression
计算的值时,谓词Number is Expression
为 True。
例子:
?- sub(12, 7, C).
C = 5.
?- sub(7, 12, C).
C = -5.
?- sub(7, 7, C).
C = 0.
Prolog 的工作方式略有不同。 后继格式数字的代码示例(例如s(0)
等于1
)将是:
sub(M,0,M).
sub(s(M),s(N),R):-
sub(M,N,R).
测试:
?- sub(s(s(s(0))),s(0),R).
R = s(s(0)) ;
false.
这是最简单的解决方案。 两种情况:要么第二个属性为 0,要么前两个属性大于零。 缺点是无法计算M<N
的情况。 请注意,大写字母是变量,代码从上到下,从左到右工作。
使用普通十进制格式的数字更复杂,因为需要明确计算数学术语。 例子:
?- M = 4, N = M-1.
M = 4,
N = 4-1.
?- M = 4, N is M-1.
M = 4,
N = 3.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.