我是turbo prolog的新手。我在添加嵌套列表时遇到了问题。我想要这样的目标 -
目标:mega_append([[1,3],[2,4,6],[0]],X)
输出应为X=[1,3,2,4,6,0]
我使用了以下代码:
domains
list=integer*
predicates
mega_append(list,list)
append(list,list,list)
clauses
mega_append([],[]).
mega_append([H|T],L3):-
mega_append(H,L1),
mega_append(T,L2),
append(L1,L2,L3).
mega_append(X,[X]).
append([],ListB,ListB).
append([X|List1],List2,[X|List3]):-
append(List1,List2,List3).
程序生成错误。它是“此位置的非法变量类型”。然后它表示H在line-mega_append(H,L1)中的位置。 我该如何摆脱这个问题?我的课程有什么错吗?请帮帮我。
答案 0 :(得分:1)
您正在操纵列表列表,而不是整数列表。尝试
listlist = list*
mega_append(listlist,list)
然后,修复你的递归。您编写的版本不适用于Prolog的静态类型变体,Turbo Prolog显然是:mega_append
在其第一个参数的头部递归调用,该参数与参数本身不同(如果它的类型为T*
,那么它的头必须是T
}类型。
mega_append([], []).
mega_append([H|T], R) :-
mega_append(T, R0),
append(H, R0, R).
顺便说一句,这个谓词的通用名称是concat/2
。
答案 1 :(得分:0)
mega_append([],[]).
mega_append([[A|R0]|R1],[A|R2]) :-
mega_append([R0|R1],R2).
mega_append([[]|R1],R2) :-
mega_append(R1,R2).