如果列表是否为回文,但我不能使用条件L1=L&L1<>L用于打印"列表是回文!"&"列表不是回文",顺便说一句,我几乎尝试了所有可用的在线方式,但没有成功。
我试过(if->then;else(&(如果,则(;(否则的话(等等,但都以失败告终。非常感谢您的帮助!
domains
ll=integer*
predicates
rev(ll,ll).
revl(ll,ll,ll).
clauses
rev(L1,L):-
revl(L1,[],L).
% I want to use if and else here to print If it is palindrome or not!
revl([],L,L).
revl([H|L1],L2,L3):-
revl(L1,[H|L2],L3).
您不需要使用if和else。
如果执行达到你所指示的点,你肯定有一个回文。
rev(L1,L):-
revl(L1,[],L), % it's a palindrome if revl(L1,[],L) succeeds
write("It's a palindrome!").
% Recursively reverse A to B in revl(A,B,X)
revl([],L,L). % succeed if at the end B=X
revl([H|L1],L2,L3):- revl(L1,[H|L2],L3). % reverse 1 step
你想要什么:
rev(L1,L):-
revl(L1,[],L),! % it's a palindrome if revl(L1,[],L) succeeds
write("It's a palindrome!").
rev(_,_):- % alternative solution in case it's not a palindrome
write("It's not a palindrome!").
% Recursively reverse A to B in revl(A,B,X)
revl([],L,L). % succeed if at the end B=X
revl([H|L1],L2,L3):- revl(L1,[H|L2],L3). % reverse 1 step
使用if-then-else
rev(L1,L):-
revl(L1,[],L)
-> write("It's a palindrome!")
; write("It's not a palindrome!").
revl([],L,L).
revl([H|L1],L2,L3):- revl(L1,[H|L2],L3).