问题标签 [iso-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.
stream - 在 Prolog 中读取流时是否总是需要使用 '.\n' ?
我正在使用管道来通信两个 Prolog 进程,每次我到达read/2
谓词以从我的管道中读取消息时,程序都会阻塞并保持这种状态。我不明白为什么会发生这种情况(我尝试了非常简单的程序),最后我意识到了三件事:
- 每次我
write/2
用来发送消息时,发送者进程都必须以.\n
. 如果消息没有这样结束,接收进程将卡在read/2
谓词上。 - 如果发送方不刷新输出,则消息不会留在管道缓冲区中。这似乎很明显,但一开始并不适合我。
- 虽然当消息没有被刷新时
read/2
是阻塞的,根本不是阻塞的,所以在这种情况下wait_for_input/3
不需要。flush_output/1
例子:
这不起作用:
那个也行不通:
虽然这两个,做工作:
现在我的问题是为什么?从管道读取(实际上是从您可能想要读取的任何流中读取)时,Prolog 仅“接受”以句点结尾的整行是否有原因?为什么read
阻塞而不阻塞wait_for_input/3
(假设消息没有被刷新)?
谢谢!
prolog - Prolog:子句不在源文件中
我有这段代码:
我收到此错误:
这个错误的目的是什么?
我的意思是,文件确实编译和运行得很好,我知道错误的含义。但为什么?
这只是执行最佳实践的通知吗?
我对逻辑编程很陌生。
谢谢!
prolog - 制作适用于 GNU 和 SWI 的 Prolog 代码
我意识到这会有限制,但是有没有一种合理的方法可以在 Prolog 代码中放入条件指令,以便它在 GNU 或 SWI 中合理地工作?sumlist
我在考虑至少最简单的情况,即SWI 和GNU中的内置谓词sum_list
在拼写上不匹配。或者 SWI 有assert
但 GNU 没有。所以最好有类似的东西:
或者简单地说:
或者什么不是。两种语言中都存在条件指令,但似乎没有提供执行此类操作所需的条件。我可能遗漏了一些手动搜索没有出现的东西。
prolog - Prolog 谓词参数中实例化模式指示符的含义
查看 Prolog 文档,谓词签名有时编写如下:
什么是:
,+
和for-
以及?
我如何解释它们?此外,这些是唯一存在的还是有更多的?
prolog - 关于 Prolog 语法
有时我会看到以下术语:X = a:b 或 X = ab
正如预期的那样,我可以执行 X = Y:Z 之类的请求,并且编译器将 Y 与 a 和 Z 与 b 统一起来。
现在我的答案是:我可以使用哪些字符(或字符序列)来组合两个 Prolog 原子?!
也许你可以给我一些关于这个问题的更多信息的链接。
感谢您的帮助和来自德国的亲切问候
prolog - 为什么我在 Prolog 中的 pi 上收到类型错误?
我正在使用pi
作为我正在编写的 Prolog 程序的一部分。这是我pi
在整个程序中唯一提到的:
但是,当我运行程序时,出现以下错误:
我在调用/使用方面做错了pi
吗?谢谢您的帮助!
prolog - 爱好 Prolog 解释器应该瞄准的现代流行标准 Prolog 是什么?
我正在编写一个 Prolog 解释器作为练习,并想知道我的目标是什么。不幸的是,有许多版本的 Prolog 可供选择,并且在不同程度上记录了它们。我很快从一个显然对互联网期望过高的人那里找到了这个问题,他想要一份详细的 Prolog html 规范。答案是您可以花 30 美元获得 ISO 标准,但这是相当不切实际的。用户永远不会为了阅读Prolog 而花 30 美元,因为他们可以用更少的钱获得 Prolog 解释器,所以如果你付钱并遵守标准,很少有人会认可你的努力。因此,ISO 标准没有得到普遍尊重一点也不让我感到惊讶。
从 ISO 标准是一个笑话的假设出发,解释器应该瞄准的 Prolog的真实版本是什么?我并不是说每个小的 Prolog 解释器都应该完全实现每个功能,但是在构建 Prolog 解释器时,必须做出的小决定是没有止境的。有人应该如何发现 Prolog 社区关于 Prolog 应该是什么的共识?
integer - gprolog 中的最小/最大整数是多少?
gprolog 中的最小/最大整数是多少?有没有办法在不使用“幻数”的情况下引用这些数字?
lambda - What is the Prolog operator `^` ("caret")?
What is the Prolog operator ^
?
Looking at The Prolog Built-in Directive op gives a list of the built-in operators.
I see
**
is exponentiation/\
is or
but what is ^
?
Each of the three current answers are of value and I learned something:
- Roy for the book
- false for the examples
- I accepted the answer by CapelliC because it made clear that ^/2 has multiple meanings
depending on context which instantly cleared up my confusion.
prolog - 为什么 Prolog 运算符定义有 xfx?
对于 Java 和 C 等允许带有运算符的语法糖(即中缀)的语言,它们使用优先级和关联性。
Prolog 还使用关联性:
左关联 - yfx
右关联 - xfy
但为什么会有 xfx?
我在互联网上发现的唯一更清楚的是
xfx 意味着运算符“支配”其分支,而 xfy 或 yfx 代表“列表构造”,在某种意义上允许链接相同优先级的表达式。
来自:CapelliC的练习中对 Prolog 运算符的解释
如果答案可以包括需要 xfx 的示例,因为 xfy 和 yfx 失败/没有意义,那将不胜感激。
Prolog 参考:Prolog 内置指令操作
作为错误的注释:
请注意,您在上面链接中提供的运算符与标准和 SWI 不同!它们至少已经过时了 10 年。例如,它应该是
current_op(200,fy,-)
.
在阅读CapelliC和false的两个当前答案后,很明显非关联是查找更多相关信息的关键词。因此,当关注非关联部分时,运算符关联性现在对 xfx 更有意义。