prolog - 分支中的单例变量
问题描述
我正在用 Prolog 解决代码出现问题的第二天的第二部分。他们要求我进行某种验证,措辞如下:
每个策略实际上描述了密码中的两个位置,其中 1 表示第一个字符,2 表示第二个字符,依此类推。(小心;Toboggan 公司政策没有“索引零”的概念!)其中一个位置必须包含给定的字母。其他出现的信件与政策执行的目的无关。
给定上面相同的示例列表:
1-3 a: abcde
有效:位置 1 包含a
,位置 3 不包含。1-3 b: cdefg
无效:位置 1 和位置 3 都不包含b
.2-9 c: ccccccccc
无效:位置 2 和位置 9 都包含c
.
为了验证这一点,我编写了以下代码:
valid_case([CAI, CBI, Char, Password]):-
nth1(CAI, Password, CA),
nth1(CBI, Password, CB),
(
CA == Char,
CB \== Char
);(
CA \== Char,
CB == Char
).
但是,我收到以下警告:
Warning: /home/pkoch/github.com/pkoch/aoc-2020/2/2.pl:31:
Warning: Singleton variable in branch: CA
Warning: Singleton variable in branch: CB
Warning: Test is always true: CA\==Char
Warning: Test is always false: CB==Char
显然,Prolog 注意到了一些我没有注意到的东西。我试过环顾四周,但每个人都指出“你没有使用变量”,但我在两个分支中都使用它们。有人可以指出我正确的方向以了解我做错了什么吗?
解决方案
这就是我打算写的:
valid_case([CAI, CBI, Char, Password]):-
nth1(CAI, Password, CA),
nth1(CBI, Password, CB),
((
CA == Char,
CB \== Char
);(
CA \== Char,
CB == Char
)).
推荐阅读
- python - 聚合方法和 lambda 函数
- testing - Botium 没有以正确的顺序运行我的测试(?)
- dynamics-crm - 案例 createdon 是否由相关的 Accounts overriddencreatedon 日期填充?- 动态 365
- apache-nifi - 限制对此进程组的修改访问
- python - 爬表 Python
- html - 如何在保持继承大小的同时设置css高度(热到偏移高度)
- python-3.x - 将 2D 图像转换为 3D
- r - 使用 lm() 和 predict() 按日期滚动回归和预测
- python-asyncio - run_in_executor 是否针对在协同程序的循环中运行进行了优化?
- ruby-on-rails - 如何在 Rails 中使用带有 before_save 的计算列