Prolog反击问题

Gen*_*l_9 2 prolog

我正在尝试编写一个order(List,Result)具有Listas输入的过程并返回Result有序对的列表,这样:

  • 有序对的第一个元素是列表中对的位置,和
  • 有序对的第二个元素是List n中相应位置的元素.

例:

如果List = [a,b,c,d],程序顺序(List,Result)输出列表: Result = [(1,a), (2,b),(3,c),(4,d)].

我正在与列表中的货币对的位置挣扎.我做过如下尝试:

increment(Accum,Total):-
        Total is Accum + 1.
order([],[]).
order([Head|Tail],Result):-
        order(Tail, NewTail),
        NewCount is Count + 1,
        increment(NewCount,Count),
        Result = [(Count,Head)|NewTail].
Run Code Online (Sandbox Code Playgroud)

请帮助任何人?

pad*_*pad 5

这两个分句:NewCount is Count + 1increment(NewCount,Count)基本具有相同的含义.你没有说清楚它Count是一个输入变量,并且它有一个基本情况1,所以Prolog不知道从哪里开始统一它的值.例如,您应该使用Count如下的输入参数(与您的版本相比,它不会有太大变化):

order([],[], _).
order([Head|Tail],[(Count,Head)|NewTail], Count):-
        NewCount is Count + 1,
        order(Tail, NewTail, NewCount).

order(List, Result ):- order(List, Result, 1).
Run Code Online (Sandbox Code Playgroud)