prolog - 序言中的局部否定
问题描述
我正在尝试编写一些规则来说明堆栈中的块数(不是数据结构,只是一个位置)。规则堆栈为堆栈中的每个块返回 true。具体来说,X 中的块数是零/一/二吗?
num_blocks(X,zero) :- \+stack(X,_).
num_blocks(X,one) :- stack(X,A),\+stack(X,B),A\=B.
所以,num_blocks(X,zero)
按预期工作,但另一个没有。我的想法是,如果我们能找到一个块(A)而我们找不到第二个唯一的块(B),那么 X 堆栈中只有一个块。但是,我仍然不断false
回来。
解决方案
您的意图(根据您的描述)是检查堆栈中是否没有其他块。但是您只是不适用于堆栈(X,B),这意味着堆栈X中没有块,并且它\+stack(X,B)
成功它将使B保持原样(未实例化)。
我认为你想要的第二个子句是堆栈(X,B)和A \ = B的合取的否定,即:
num_blocks(X,one) :-
stack(X,A),
\+ ( stack(X,B), A\=B ).
推荐阅读
- c# - C#正则表达式多重匹配
- python - 如何使用 Python 根据常用字符对列表中的字符串进行排序?
- amazon-web-services - AWS EC2:为什么 cloud-init 忽略我的脚本?
- python-3.x - 如何处理“ModuleNotFoundError: No module named 'setup'”
- julia - 为什么在 Julia 中使用宏?
- apache-flink - 为什么table api中的flink kafka源无法合并?
- r - 绘制 strobiloid
- time - 获取累积风险值
- flexslider - FlexSlider 箭头工作但不可见
- docker - nginx 无法将请求转发到在不同容器中运行的服务