问题标签 [prolog]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
prolog - 如何在 Prolog 中修复这个循环谓词?
为什么这不能在 Prolog 中定义“已婚”?
不允许使用这些循环谓词吗?我将如何解决它?
谢谢
prolog - 我如何需要订购这些 Prolog 规则才能运行我的程序?
我正在尝试根据老歌做家庭作业,我是我自己的爷爷。
所以,我已经开始为谁是儿子、女儿、父亲、父亲_in
_law 等定义规则。
但是,我的规则/事实的顺序一定有问题,因为每次加载它时都会出现以下错误:
GNU Prolog 1.3.1
作者 Daniel Diaz 版权所有 (C) 1999-2009
Daniel Diaz | ?- [爷爷]。正在编译 /home/nfs/student/USER/cs4700/grandpa.pl
以获取字节码...
/home/nfs/student/USER/cs4700/grandpa.pl:119:警告:不连续谓词 child/2 - 子句被忽略
/home /nfs/student/USER/cs4700/grandpa.pl:120:警告:不连续谓词 child/2 - 忽略子句
/home/nfs/student/USER/cs4700/grandpa.pl:121:警告:不连续谓词 child/2 -子句被忽略
/home/nfs/student/USER/cs4700/grandpa.pl:122:警告:不连续谓词 child/2 - 子句被忽略
/home/nfs/student/USER/cs4700/grandpa.pl:123:警告:不连续谓词child/2 - 子句被忽略
/home/nfs/student/USER/cs4700/grandpa.pl:124:警告:不连续谓词 child/2 - 忽略子句
/home/nfs/student/USER/cs4700/grandpa.pl:125:警告:不连续谓词儿子/ 2 - 忽略子句
/home/nfs/student/USER/cs4700/grandpa.pl:126:警告:不连续谓词儿子/2 - 忽略子句
/home/nfs/student/USER/cs4700/grandpa.pl:127:警告:不连续谓词son/2 - 忽略子句
/home/nfs/student/USER/cs4700/grandpa.pl:128:警告:不连续谓词son/2 - 忽略子句
/home/nfs/student/USER/cs4700/grandpa.pl: 129:警告:不连续谓词 son/2 - 忽略子句
/home/nfs/student/USER/cs4700/grandpa.pl:130:警告:不连续谓词女儿/2 - 忽略子句
/home/nfs/student/USER/cs4700/grandpa.pl:131:警告:不连续谓词已婚/2 - 子句已忽略
/home/nfs/student/USER/cs4700/grandpa.pl:132:警告:不连续谓词已婚/ 2 - 子句忽略
/home/nfs/student/USER/cs4700/grandpa.pl:133:警告:不连续谓词已婚/2 - 子句忽略
/home/nfs/student/USER/cs4700/grandpa.pl:134:警告:不连续谓词已婚/2 - 子句被忽略
/home/nfs/student/USER/cs4700/grandpa.pl:135:警告:不连续谓词 son_in_law/2 - 子句被忽略
/home/nfs/student/USER/cs4700/grandpa.pl: 136:警告:不连续谓词father_in_law/2 - 子句被忽略
/home/nfs/student/USER/cs4700/grandpa.pl:137:警告:不连续谓词父亲/2 - 忽略子句
/home/nfs/student/USER/cs4700/grandpa.pl:138:警告:不连续谓词父亲/ 2 - 忽略子句
/home/nfs/student/USER/cs4700/grandpa.pl:139:警告:不连续谓词父亲/2 - 忽略子句
/home/nfs/student/USER/cs4700/grandpa.pl:140:警告:不连续谓词母亲/2 - 忽略子句
/home/nfs/student/USER/cs4700/grandpa.pl:141:警告:不连续谓词母亲/2 - 忽略子句
/home/nfs/student/USER/cs4700/grandpa.pl: 142:警告:不连续的谓词母亲/ 2 - 子句被忽略
/home/nfs/student/USER/cs4700/grandpa.pl:143:警告:不连续谓词 step_mother/2 - 忽略子句
/home/nfs/student/USER/cs4700/grandpa.pl:144:警告:不连续谓词 Brother_in_law/ 2 - 忽略子句
/home/nfs/student/USER/cs4700/grandpa.pl:145:警告:不连续谓词 Brother_in_law/2 - 忽略子句
/home/nfs/student/USER/cs4700/grandpa.pl:146:警告:不连续谓词 uncle/2 - 子句忽略
/home/nfs/student/USER/cs4700/grandpa.pl:147:警告:不连续谓词 step_daughter/2 - 子句忽略
/home/nfs/student/USER/cs4700/grandpa.pl 已编译,读取 149 行 - 写入 8389 字节,44 毫秒
到目前为止,我的代码是:
我对prolog很陌生,所以我可能只是犯了一些根本性的错误。有人可以帮我指出有关这些错误的正确方向吗?
prolog - 如何在 Prolog 中实现“我是我自己的爷爷”?
以下故事来自 N. Wirth (1976) 的算法 + 数据结构 = 程序。
我嫁给了一个寡妇(我们称她为 W),她有一个成年女儿(称她为 D)。我的父亲(F)经常来看我们,他爱上了我的继女并娶了她。于是,父亲成了我的女婿,继女成了我的母亲。几个月后,我妻子生了一个儿子(S1),他成为我父亲和叔叔的姐夫。我父亲的这个妻子,也就是我的继女,也有一个儿子(S2)。
我正在尝试在 prolog 中对这些关系进行建模,因此最终我可以输入:
对于我是否是我自己的爷爷,我会得到“是”或“否”。
这是我到目前为止编写的代码(grandpa.pl):
现在我在循环定义方面遇到了很多麻烦,所以在运行查询时我会陷入无限循环:祖父(i,i)。
例如,我有:
(1 毫秒) 是 {trace} | ?-祖父(i,i)。1 1 呼叫:祖父(i,i) ?
2 2 呼叫:祖父母(i,i)?
3 3 呼叫:父母(i,_103)?
4 4 呼叫:child(_127,i) ?
5 5 呼叫:父母(i,_151)?
6 6 调用:child(_175,i) ?
7 7 呼叫:父母(i,_199)?
8 8 调用:child(_223,i) ?
9 9 呼叫:父母(i,_247)?
10 10 调用:child(_271,i) ?
11 11 呼叫:父母(i,_295)?
12 12 呼叫:孩子(_319,i)?
13 13 呼叫:父母(i,_343)?
14 14 呼叫:child(_367,i) ?
15 15 呼叫:父母(i,_391)?
...
这是因为 child 将自己定义为有一个 parent,而 parent 定义自己有一个 child(正如您将在我发布的上述谓词中看到的那样)。
谁能帮我重新定义这些关系的谓词,以便我可以确定我是否是我自己的爷爷?
java - 如何使用 Java 找到字符串中第一个“元素”的索引?
我正在用 Java 编写一个简单的 Prolog 解释器。
如何在“列表语法”中找到字符串的头元素或尾元素的第一个元素的最后一个字符索引?
列表语法如下所示:
(X)
(pab)
(func (func2 a) (func3 XY)
)
每个字符串的头部依次为:
头部:“X”,索引:1
头部:“p”,索引:1
头部:“func”,索引:4
头部:“equal”,索引:5
基本上,我需要匹配紧跟第一个“(”并以空格或结束“)”结尾的字符串,以先到者为准。我需要 head 元素的最后一个字符的字符索引。
如何在 Java 中匹配并获取此索引?
Brabster 的解决方案非常接近。但是,考虑以下情况:
((b X) Y)
头元素是(bx)。我试图通过从扫描仪分隔符中删除“(”来修复它,但由于“b”和“x”之间的空格,它仍然会打嗝。
类似地:((((b W)X)Y)Z)
头部是(((bw)x)Y)。
prolog - 如何在 Prolog 中定义相对规则?
如何在 Prolog 中定义相对规则?
这是我到目前为止得到的:
提前致谢!
prolog - 将查询展开到 prolog 中的列表中
如何将查询扩展为列表?
math - prolog中的幂函数
我的幂函数有什么问题?
prolog - 如何在 Prolog 中找到目标的所有解决方案?
我有谓词 P1 一个接一个地返回值,如下所示:
我还有另一个谓词 P2:
如何找到 的所有值RETURN
并将它们分配给LIST
?
character-encoding - prolog中是否有字母字符检查?
问候,
我可以在序言中使用测试或谓词来验证某个给定字符是否按字母顺序排列?现在,我正在做的是:
非法字符列表:\n -> 10, 空格 -> 32, !->33, .->46, ,->44, :->58, ;->59% % 63->? , 45 -> -, 34->", 39-> %
这些只是我需要检查的几个字符。进行诸如字母(Ch)之类的测试。会为我节省大量时间,最重要的是这是一种更具防御性的方法。
谢谢