标签: iso-prolog

如何使用prolog查找字符串长度

我有一个方法长度(列表,var),它给了我一个列表的长度,但我想找到一个字符串的长度,任何人有一个解决方案?

prolog iso-prolog

4
推荐指数
2
解决办法
5266
查看次数

列表中或列表外的prolog对有什么用处

我在SWI-PL文档中遇到过几次键值对,但无法得到关于它们的好信息.这是prolog中的标准内容还是仅仅是swi pl扩展?主要在这里找到:http ://www.swi-prolog.org/pldoc/doc_for?object= keysort/2和这里:http://www.swi-prolog.org/pldoc/doc_for? object= section%282, %27A.3%27,SWI%28%27/DOC /手动/ assoc.html%27%29%29

对的形式例如是a-5,或者在列表[a-5,b-7]中.

如果它是标准的,那么使用它们还有附加价值吗?他们的兴趣是什么?提前致谢 :)

prolog iso-prolog

3
推荐指数
1
解决办法
957
查看次数

Prolog Functor - 计算x ^ y

我是prolog的新手并且正在努力学习如何编程.我想知道如何x^y在Prolog中计算都是整数.

我知道事实是这样的事情:

% exp(y,x,z) <- z is x**y
Run Code Online (Sandbox Code Playgroud)

prolog exponentiation iso-prolog

3
推荐指数
1
解决办法
1200
查看次数

Prolog中缀运算符定义

我最近在学习Prolog,发现用于定义中缀运算符的三种类型令人困惑。

指定运算符的类型时,xfx,xfy和yfx有什么区别?我已经搜索了这个问题,但没有发现任何有用的信息。

我尝试在Prolog中键入以下代码:

:- op(500,yfx,is_alive).
is_alive(A,B) :- display([A,B]).
:- op(500,xfy,is_alive2).
is_alive2(A,B) :- display([A,B]).
:- op(500,xfx,is_alive3).
is_alive3(A,B) :- display([A,B]).
Run Code Online (Sandbox Code Playgroud)

和输出:

| ?- 1 is_alive 2.
'.'(1,'.'(2,[]))

yes
| ?- 1 is_alive2 2.
'.'(1,'.'(2,[]))

yes
| ?- 1 is_alive3 2.
'.'(1,'.'(2,[]))

yes
Run Code Online (Sandbox Code Playgroud)

结果对我来说没有区别。

prolog infix-operator iso-prolog

3
推荐指数
1
解决办法
3920
查看次数

基于列表中的现有原子生成新原子

我想知道如何基于另一个列表中的现有原子在列表中生成新原子.给出清单:

L=[a,b,c,d]
Run Code Online (Sandbox Code Playgroud)

我想制作一个新列表,例如:

P=[a_,b_,c_,d_]
Run Code Online (Sandbox Code Playgroud)

换句话说,类似于字符串添加的东西,例如

String str1 = str2 + "_";
Run Code Online (Sandbox Code Playgroud)

list prolog iso-prolog

3
推荐指数
1
解决办法
125
查看次数

为什么Prolog运算符定义有xfx?

对于Java和C等允许使用运算符(即中缀)的语法糖的语言,它们使用优先级关联性.

Prolog也使用关联性:
左关联 - yfx
右关联 - xfy

但为什么有xfx?

我在互联网上找到的唯一更清晰的东西是

xfx表示运算符在其分支上"支配",而xfy或yfx代表"列表构造",意思是允许链接具有相同优先级的表达式.

来自:在锻炼的Prolog的运营商的解释CapelliC

如果答案可以包括需要xfx的示例,因为xfy和yfx失败/没有意义,那将是值得赞赏的.

对于Prolog参考:Prolog内置指令op

作为虚假记录:

请注意,您在上述链接中提供的运算符与标准和SWI不同!它们已经过时了至少10年.作为一个例子,它应该是current_op(200,fy,-).

在阅读CapelliC的两个当前答案并且错误后,很明显非关联是找到更多相关信息的关键词.因此,当关注非关联部分时,运算符关联现在对xfx更有意义.

operators prolog syntactic-sugar iso-prolog

3
推荐指数
1
解决办法
1259
查看次数

在ISO Prolog中没有捕获

我正在努力克服throw/1的精确语义,而没有ISO Prolog中合适的catch/3.我正在阅读ISO Prolog规范,在我看来,执行将以无限递归结束.

(请注意,您必须能够访问ISO Prolog标准才能解释此问题).

步骤1.假设我们调用throw(未知),并且堆栈上没有catch/3.

步骤2.它将在7.8.10.1 c)结束,说它将是一个系统错误(7.12.2 j).

第3步.这是在其他地方用于其他地方的同一种配方,所以我认为它应该以相同的方式解释.因此7.12.1适用,并且当前目标(throw/1)将被throw替换(error(system_error,Imp_def)).

步骤4.执行此目标将在堆栈上找不到活动的"catch".因此,它应该尝试相同的步骤,继续步骤2,依此类推=>无限递归.

你可能会说未被捕获的"throw"转换为system_error是"最终的"并且不会像其他错误一样进一步处理,并且它可能必须如此,以避免我描述的问题,但我的问题是,标准在哪里涵盖

其他一些注释,为了完整性:

  1. 7.12.2中的注4也提到了在这种情况下出现系统错误的可能性.我认为那里使用的公式("......没有活跃的目标捕获/ 3")在另一个方面引入了一些混淆,因为它应该符合条件,即捕手必须与错误术语统一(B ).

  2. 将未捕获的throw-s转换为系统错误背后的想法是什么?它看起来可能存在,使Prolog处理器的顶级生活"更容易",因此它只能收到一个可预测的错误?对我而言,这带来的问题多于好处 - 错误的真正原因因此消失 - 任何意见或评论?

  3. 形式语义(附件A)似乎也以某种方式与此斗争,尽管我没有详细研究它.在A.2.5,它提到,"...然而,在正式规范有在根捕手...",并且涉及它,例如,向的findall/3的执行.那么正式的规范与正文有何不同?

iso-prolog

3
推荐指数
1
解决办法
197
查看次数

为什么 prolog 使用 =&lt; 而不是 &lt;=?

Prolog 中的数字比较运算符与其他语言几乎相同。

操作员 意义
X > Y X 大于 Y
X < Y X 小于 Y
X >= Y X 大于或等于 Y
X =< Y( 不是<= X 小于或等于 Y

问题:为什么 prolog 与大多数其他语言不同并且使用=<and not <=

原因是由于此类符号是如何手写的,因此经常引用从右到左:-的含义含义的解释。<-


更新 - 编辑以纠正拼写错误

prolog iso-prolog

3
推荐指数
1
解决办法
144
查看次数

有时我不知道Prolog中的"/"是什么意思

我在代码中看到像这样使用的斜杠:

solution([X/Y|Others]) :-
   noattack(X/Y, Others).
Run Code Online (Sandbox Code Playgroud)

但有时我会在Prolog中看到"/ 1""/ 2"等.

这些陈述(字符)是什么意思?

prolog iso-prolog

2
推荐指数
1
解决办法
245
查看次数

序言:声明一个运算符

我已经定义了!(阶乘)函数并将其注册为算术函数和运算符,以便可以执行:A是6!。

现在我要定义!(奇数阶乘),但方法相同-编写子句,注册算术函数和运算符,调用A为7!-结果为SyntaxError:应为运算符

如果可能的话,我该如何注册!操作员?

是的,我知道,!通常是削减。

operator-overloading prolog iso-prolog

2
推荐指数
1
解决办法
371
查看次数

具有相同优先级的Prolog中缀运算符一个xfy,另一个yfx具有两个顺序运算符

在试图理解该类型的中缀运算符xfy并且yfx具有相同的优先级和顺序时,我看到只有四种组合.

运用

a = xfy  right-associative
b = yfx  left-associative
Run Code Online (Sandbox Code Playgroud)

aa  e.g. 1 xfy 2 xfy 3   e.g. 1 ^ 2 ^ 3
ab  e.g. 1 xfy 2 yfx 3  
ba  e.g. 1 yfx 2 xfy 3  
bb  e.g. 1 yfx 2 yfx 3   e.g. 1 - 2 - 3
Run Code Online (Sandbox Code Playgroud)

现在对于(xfy xfy)aa,运算符都是正确关联的.
对于(yfx yfx)bb,运营商都是左联盟.

但是对于(xfy yfx)ab ,(xfy)a运算符是右关联的,而(yfx)b运算符是左关联的.如果我理解正确,Prolog将评估为:

使用优先权500x意义<y意义 …

operators infix-notation iso-prolog

2
推荐指数
1
解决办法
653
查看次数

为什么prolog的ISO模块标准失败?

这里的介绍中,它指出Prolog的ISO模块标准是失败的.任何人都可以详细说明这个吗?

standards iso module prolog iso-prolog

2
推荐指数
1
解决办法
426
查看次数