Prolog简化

时间:2016-12-15 14:13:27

标签: prolog

有人能告诉我是否有更简单的方法在Prolog中编写此代码,我需要将其缩小以使其更紧凑。

这是我到目前为止所做的:

add(X,[],[X]).
add(X,[A|L],[A|L1]) :-
    add(X,L,L1).

head([X|_], X).

exist(X,Y,A,B) :-
    between(1, 8, X),
    between(1, 8, Y),
    between(1,8,A),
    between(1, 8, B).

exist(X/Y, A/B) :-
    exist(X,Y,A,B).

1 个答案:

答案 0 :(得分:0)

首先,删除head/2。 Prolog的模式匹配比这更短,更易读。

其次,你想用add/3做什么?在我看来,它所做的就是给你第二个列表中的最后一个元素,如果它们碰巧具有完全相同的元素,除了第二个元素还有一个元素。换句话说,唯一成功的统一看起来像add(Z, [A,B,...,Y], [A,B...Y,Z]),我很难想象你可能需要的场景。

exist/4中修复第3行的间距!对你的工作感到自豪! exist/4将为您生成4个变量的所有排列,从1-8中选择。看起来不错,不确定为什么需要它。

exist/2只需重新格式化exist/4,使其看起来像分数。再次,不知道为什么你需要它。

您要对此代码执行什么操作?这看起来像一堆奇怪而无关的公用事业。