如何解决如何编写递归减法的序言程序
我想要一个 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 is Expression
是 Number
求值的值时,谓词 Expression
为 True。
示例:
?- sub(12,7,C).
C = 5.
?- sub(7,12,C).
C = -5.
?- sub(7,C).
C = 0.
,
Prolog 的工作方式有点不同。后继格式数字的代码示例(例如 s(0)
等于 1
)是:
sub(M,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.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。