我有这个代码:
stmt([pass|Tail], Tail) :- !.
stmt([use, X|Tail], Tail) :- atom(X),!.
stmt([declare, X|Tail], Tail) :- atom(X),!.
stmts(X, X) :- !.
stmts(X, Y) :- stmt(X, Z), stmts(Z, Y).
blck([begin, _, end|Tail], Tail) :- !.
我的目标是,给定一个 blck(List1, List2),如果 List1 以匹配“begin
返回 true 的示例是:
blck([begin,declare,x,use,x,end,tail],[tail]).
我当前的 blck 代码采用 _ 作为术语。但是,它仅适用于单个术语,我希望它接受 k 个术语。或者更好的 stmts()。我完全不知道如何在定义中使用 k 个术语。任何帮助表示赞赏。
答案 0 :(得分:1)
您不能使用通配符 output = array([14,17,32,35])
来代表任意数量的变量。正如已经从 _
开始的那样,需要涉及某种递归,但这也需要适当的递归结束或基本情况。 stmts
是一个循环定义,它总是产生相同的列表。相反,每个步骤都应该使用一个语句,并且整个递归必须以 stmts
结束。
在以下方法中,blck 以 end
开头并传递给 begin
,然后检查语句直到找到 body
(结果为 end
) ,或空列表或非语句(结果为 true
)。
false