Prolog 中的 If-else 很简单
Condition → Then ; Else
分别
Condition1 → Then1
; Condition2 → Then2
; …
; Else
你的 C 代码
if(X!=4 || Y!=3)
printf("1");
else if(A!=4 || Y==3 && Z==2)
printf("2");
会翻译成
(X \= 4; Y \= 3) -> write('1')
; (A \= 4; Y = 3, Z = 2) -> write('2')
; true % or drop this line, then it will raise a unification error
但请注意,您应该只在外部循环中使用write/1,因为该函数不纯(执行顺序很重要)。
也许你应该这样写:
( (X \= 4; Y \= 3) -> Message = '1'
; (A \= 4; Y = 3, Z = 2) -> Message = '2'),
write(Message).
请注意,Prolog 是一种逻辑编程语言。通常你会发现从命令式编程语言逐字翻译并不是最好的解决方案。
举个例子,看看我几天前回答的一个问题:“Calculating whether number is prime in Prolog”:
命令式:
is_prime(A) :-
A > 1, % Negative numbers, 0 and 1 are not prime.
is_prime(A, 2). % Begin iteration:
is_prime(A, B) :- % Test if A divides by B without remainder
B >= A % The limit was reached?
-> true % Then it's prime.
; 0 is A mod B % B divides A without a remainder?
-> false % Then it's not prime.
; C is B + 1, % Otherwise: C is B + 1
is_prime(A, C). % Test if C divides A.
逻辑:
is_prime(A) :-
L is A - 1, % L is floor(sqrt(A)) ← optimized upper bound
\+ (between(2, L, X), % Is there a number X between 2 and L
0 is A mod X). % that divides A without a remainder?
哪个更容易阅读?