Prolog 序言简化

Prolog 序言简化,prolog,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

有没有人能告诉我,如果有一种更简单的方法在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).

首先,删除头/2。Prolog的模式匹配比这个更短,可读性更强

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

exist/4
中,固定第3行上的间距!对你的工作感到自豪吧<代码>存在/4将生成从1-8中选择的4个变量的所有排列。看起来不错,不知道你为什么需要它

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


你想用这个代码做什么?这看起来像是一堆奇怪且不相关的实用程序。

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

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

exist/4
中,固定第3行上的间距!对你的工作感到自豪吧<代码>存在/4将生成从1-8中选择的4个变量的所有排列。看起来不错,不知道你为什么需要它

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


你想用这个代码做什么?这看起来像是一堆奇怪且无关的实用程序。

这是一个更大程序的一部分,该程序为棋盘上的骑士寻找最短路径。在我提交作业之前,我需要使上面的代码更加简洁,不那么凌乱。有没有什么方法可以让你看看我目前所拥有的,你可以私下指导我如何改进。谢谢顺便说一句,我之前在我的作品中固定了间隔…@zarrexx如果你只使用
exist/2
,将
exist/4
的主体移动到那里并删除
exist/4
。谢谢,我有什么方法可以将我的完整代码发送给你,你可以帮我吗?因为我不能在此发布我的完整代码,这是一个更大的程序的一部分,该程序为棋盘上的骑士寻找最短路径。在我提交作业之前,我需要使上面的代码更加简洁,不那么凌乱。有没有什么方法可以让你看看我目前所拥有的,你可以私下指导我如何改进。谢谢顺便说一句,我之前在我的作品中固定了间隔…@zarrexx如果你只使用
exist/2
,将
exist/4
的主体移动到那里并删除
exist/4
。谢谢,我有什么方法可以将我的完整代码发送给你,你可以帮我吗?因为我不能在这里发布我的完整代码