【问题标题】:Prolog Simplification序言简化
【发布时间】:2016-12-15 23:05:16
【问题描述】:

谁能告诉我是否有更简单的方法可以在 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).

【问题讨论】:

    标签: prolog


    【解决方案1】:

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

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

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

    exist/2 只是重新格式化exist/4 使其看起来像分数。同样,不确定您为什么需要它。

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

    【讨论】:

    • 这是一个更大的程序的一部分,它为棋盘上的骑士找到最短路径。在我提交作业之前,我需要让上面的代码更简洁、更简洁。有什么办法可以向您展示我到目前为止所拥有的,您可以指导我如何私下改进它。谢谢!附言。我在我发布之前修复了我的工作中的间距...
    • @zarrexx 如果您只使用过exist/2,请将exist/4 的主体移到那里并删除exist/4
    • 谢谢,有什么办法可以把我的完整代码发给你,你能帮我吗?因为我不能在这里发布我的完整代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多