List 如何编写一个谓词,将一个列表作为输入,并使用Prolog将该列表中所有列表类型的条目追加到一个新列表中?

List 如何编写一个谓词,将一个列表作为输入,并使用Prolog将该列表中所有列表类型的条目追加到一个新列表中?,list,prolog,append,left-recursion,List,Prolog,Append,Left Recursion,它应该以左递归的方式完成。现在我们有: listsFromList([],[]) . listsFromList([Head|Tail], LL):- listsFromList(Tail,LL), is_list(Head), append(Head,LL, Newlist), LL is Newlist. listsFromList([Head|Tail], LL):- listsFromList(Tail,LL), not(is_list(Head)), LL

它应该以左递归的方式完成。现在我们有:

listsFromList([],[]) .
listsFromList([Head|Tail], LL):-
   listsFromList(Tail,LL),
   is_list(Head),
   append(Head,LL, Newlist), LL is Newlist.
listsFromList([Head|Tail], LL):-
   listsFromList(Tail,LL),
   not(is_list(Head)), LL is LL.
然而,它总是给我这个错误:

ERROR: Type error: `[]' expected, found `[a,b]' (a list) ("x" must hold one character)
例如,如果我想这样查询。输出应如下所示:

?- listsFromList([1,[],2,3,4,[a,b]],X).
X = [[], [a, b]] .
有人能给我解释一下我做错了什么吗?

你可以使用is\u列表:-

list([],[]).
list([H|T],[H|B]):-
    is_list(H),
    list(T,B).
list([H|T],B):-
    \+is_list(H),
    list(T,B).

?-list([1,[],2,3,4,[a,b]],X).
X = [[], [a, b]]

另请参见:这是否回答了您的问题?是的!非常感谢你