Prolog-Redo after failed if语句导致未实例化的变量?
解决:阅读回答,似乎是一个格式问题。在第4行周围放上括号 我试图使用if->then;在prolog中,else仅对列表中的偶数整数求和。我只是想跳过那些不是偶数的数字。下面是我的代码Prolog-Redo after failed if语句导致未实例化的变量?,prolog,Prolog,解决:阅读回答,似乎是一个格式问题。在第4行周围放上括号 我试图使用if->then;在prolog中,else仅对列表中的偶数整数求和。我只是想跳过那些不是偶数的数字。下面是我的代码 sum_even([], 0). sum_even([H|T], Sum):- sum_even(T, Temp), even(H) -> Sum is H + Temp; Sum is Temp. even([]). even(Num):- 0 is Num mod 2. 问题
sum_even([], 0).
sum_even([H|T], Sum):-
sum_even(T, Temp),
even(H) -> Sum is H + Temp; Sum is Temp.
even([]).
even(Num):-
0 is Num mod 2.
问题是,当偶数(H)失败时,它会在上面的行上调用“重做”(不确定这意味着什么),这会导致Temp未经证实吗?总的来说,Temp失败了,然后整个过程都失败了。有人能解释一下我做错了什么以及如何解决这个问题吗。if-then-else构造缺少括号。运算符优先级使if部分在代码中为
sum_偶数(T,Temp),偶数(H)
。请尝试:
sum_even([], 0).
sum_even([H|T], Sum):-
sum_even(T, Temp),
(even(H) -> Sum is H + Temp; Sum is Temp).