PROLOG:试图绕过predsort删除重复的对象

时间:2014-04-24 21:10:29

标签: sorting prolog

我正试图让它如此预测不会删除​​我拥有的任何重复对象,我想我知道其中的逻辑,但我似乎无法让它工作。我一直试图调用以前的谓词,当找到重复项时按另一项排序,但是当我尝试这个时我会收到错误。

process(3, X) :-
    nl,
    sort(X, Q),
    show_records(Q),
    nl, nl, menu(Q).

process(4, X) :-
    nl,
    predsort(sortName,X,Q),
    show_records(Q),
    nl, nl, menu(Q).

sortName(T, [_,E,_], [_,R,_]) :-
    (compare(T, E, R)
      ->process(3, X)

      ).


process(5, X) :-
    nl,
    predsort(sortGrade,X,Q),
    show_records(Q),
    nl, nl, menu(Q).

sortGrade(T, [_,_,E], [_,_,R]) :-
    (compare(T, E, R)
      ->process(4,X)
      ).

进程3按子列表中的第一个值排序,4表示第二个值,5表示最后一个值。我试图让它在5找到重复的地方,它将转到4,如果需要,从4到3。

1 个答案:

答案 0 :(得分:0)

无论如何,即使你发现自己是解决方案,我也会回答,因为我不清楚ditto解决方案是否与我的匹配。

我的意思是:前一段时间我写了我自己的predmsort / 3(以明显模式出现在sort / msort的术语中),原因与您报告的完全相同。

在我意识到我的问题有一个更好的解决方案之前,时间过去了:

只是从不返回=。

就是这么简单......