我想在Prolog中使用if else来实现这种东西。从C ++背景中我发现很难实现。我怎么能这样做?
if(X!=4 || Y!=3)
printf("1");
else if(A!=4 || Y=3 && Z==2)
printf("2");
答案 0 :(得分:1)
尝试这段代码:
main:- (X\=4 ; Y\=3) -> write('1') ;
(A \=3 ; Y is 3 , Z is 2) -> write('2').
\=
等于!=
;
等于||
,
等于&&
is
等于=
,但您也可以使用=
->
等于then
我添加了四个read/1
来测试代码:
main:- read(X),read(Y),read(A),read(Z),
(X\=4 ; Y\=3) -> write('1') ;
(A \=3 ; Y is 3 , Z is 2) -> write('2').
我得到了:
3 ?- main.
|: 4.
|: 3.
|: 2.
|: 2.
2
true
第二个if
有效
6 ?- main.
|: 3.
|: 6.
1
true.
首先if
有效
答案 1 :(得分:1)
如果Prolog中的其他内容只是
Condition → Then ; Else
RESP。
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是一种逻辑编程语言。 Ofttimes你会发现命令式编程语言的逐字翻译不是最好的解决方案。
举个例子,请看几天前我回答的一个问题:“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?
哪个更容易阅读?