- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我编写了一个简单的程序来尝试使用满足特定约束的元素填充给定长度的列表。
例如,我想创建一个 0 到 9 之间的 4 个整数的列表,其中至少包含 3
和 4
。我可以想到几个(实际上是数千个)这样的列表:
[3,4,0,0]
[0,3,4,0]
[3,1,9,4]
etc...
但是 SWI Prolog 只返回 false
。我只是犯了某种逻辑错误,还是我错误地使用了 Prolog?
我的代码:
is_single_digit_integer(N) :-
integer(N),
between(0, 9, N).
filled_list(Given, FillConstraint, OutLen, Out) :-
is_list(Out),
length(Out, OutLen),
length(Given, GivenLen),
between(0, OutLen, GivenLen),
maplist(FillConstraint, Out),
subset(Given, Out).
并运行我描述的示例:
?- filled_list([3,4], is_single_digit_integer, 4, X).
最佳答案
我想用一个简短的指针来补充丹尼尔的答案logical-purity :
一般 Prolog 程序的via regia是使用谓词来满足您期望从逻辑关系中得到的属性。这样的谓词被称为纯和单调。
例如,在您的特定情况下,您使用非单调谓词integer/1
和is_list/1
。如果您改为使用可以在所有方向使用的谓词,您的问题就会完全消失,例如:
is_single_digit_integer(N) :- N in 0..9.
这使用 clpfd约束 (in)/2
来说明:N
是 0 到 9 之间的整数。
它适用于以下所有情况:
?- is_single_digit_integer(N).N in 0..9.?- is_single_digit_integer(3).true.?- is_single_digit_integer(20).false.
相比之下,integer/1
是不完整:
?- integer(N).false.
→ 没有整数存在??
这同样适用于 is_list/1
,它对于最通用的查询来说已经严重不足:
?- is_list(Ls).false.
相反,要声明 Ls
是一个列表,您可以使用:
length(Ls, _)
无论是否 Ls
被实例化,它都能正常工作。例如:
?- length(Ls, _).Ls = [] ;Ls = [_6650] ;Ls = [_6650, _6656] ;Ls = [_6650, _6656, _6662] ;etc.
为了充分利用 Prolog,我建议保留其纯粹且单调的子集。这为可以在各个方向使用的关系铺平了道路。
关于prolog - 我的 Prolog "list filler"有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46308000/
我编写了一个简单的程序来尝试使用满足特定约束的元素填充给定长度的列表。 例如,我想创建一个 0 到 9 之间的 4 个整数的列表,其中至少包含 3 和 4。我可以想到几个(实际上是数千个)这样的列表:
假设我想从某个日期范围获取“每周”结果,并且该日期范围包含四个单独的周,但我的数据库只有一周的记录,如何获取剩余三周的填充值? 例如,给定以下日期范围:6/2018 - 7/2018 我运行此查询:
在我的分析器链中,ShingleFilter 位于停用词过滤器之后。如 docs 中所述, ShingleFilter 通过插入填充标记(带有术语文本“_”的标记)处理位置增量 > 1。 For ex
This page Java教程中的问题2d让我非常困惑。查看Java文档here ,看来静态嵌套类 javax.swing.Box.AccessibleBox 是 protected ,因此可以在子
如果我有一段英文文本,清除所有“填充”词(如“the、it、or、we、us”等)的最佳方法是什么...只留下可行的词被认为是文本的真实核心内容? 我正在集思广益,想出一种方法,根据关键字组成的相似程
我正在尝试将一个结构从 main 发送到 .h 文件以便在那里进行操作。这是我的 .c 中的代码: #include #include #include #include "funcon.h"
这是我的整个 init.vim 文件(目前只是试图让它工作 - 一旦主要目标正常工作,我将删除不必要的代码)。 我面临的问题: 一旦我折叠了我的代码部分,我就无法摆脱尾随的 -'s。 Fold 的 x
我正在为 SVC Bernoulli 输出绘制二维图。 从 Avg word2vec 和标准数据转换为向量 拆分数据以进行训练和测试。 通过网格搜索找到最好的C和gamma(rbf) clf = SV
我是一名优秀的程序员,十分优秀!