首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prolog简化

Prolog简化
EN

Stack Overflow用户
提问于 2016-12-15 14:13:27
回答 1查看 81关注 0票数 1

有谁能告诉我,如果有更简单的方式来编写这段代码的Prolog,我需要缩小这个范围,使它更紧凑。

到目前为止,这就是我所拥有的:

代码语言:javascript
复制
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).
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-15 15:05:16

首先,删除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,使其看起来像分数。再说一次,不知道你为什么需要它。

你想用这段代码做什么?这看起来像是一堆奇怪而又不相关的实用工具。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41166286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档