[英]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.