在turbo prolog中附加嵌套列表的问题

时间:2011-04-26 18:49:31

标签: list prolog append turbo-prolog

我是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)中的位置。 我该如何摆脱这个问题?我的课程有什么错吗?请帮帮我。

2 个答案:

答案 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).