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在行中的位置- mega_append(H,L1)。我怎样才能摆脱这个问题?我的程序有什么错误吗?

您正在操作列表的列表,而不是整数列表。试着

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


mega_append([],[]).
mega_append([[A|R0]|R1],[A|R2]) :-
        mega_append([R0|R1],R2).
mega_append([[]|R1],R2) :-
        mega_append(R1,R2).

相关内容

  • 没有找到相关文章

最新更新