iso-prolog相关内容
我在看书时遇到了问题.我看到一个程序使用谓词“简单"(我猜 simple/1 ).不知道这个谓词是什么意思,在控制台用 ?-help(simple) 找不到.但是当我在控制台中尝试一些查询时,它的工作方式类似于: 5 ?- 简单(p(x)).错误的.6 ?- 简单(mia).真的.7 ?- 简单(米娅).真的.8 ?- 简单(f(Mia)).错误的. 我想这是某种谓词来确定参数是术语(或变量)
..
考虑以下对上下文无关文法的扩展,它允许规则在左侧具有一个(或多个)终结符,位于非终结符的右侧.即形式的规则: A b ->... 右边可以是任何东西,比如上下文无关语法.特别是,不是要求,右侧的末尾将具有完全相同的终端符号.在这种情况下,此扩展将是上下文相关的.但终端不仅仅是一个上下文.有时,这个终端被称为“推回". 显然,这不再是 CFG(类型 2).它包括类型 1.但它是什么?真的已
..
我有这个跟踪元解释器,从上一个问题 Prolog 未绑定绑定变量改变. 我不明白如何解释 cut.感谢@false 用户告诉我,cut 的实现很糟糕,我的问题是,我应该如何在这个元解释器中实现 cut? %tracermi_trace(目标):-mi_trace(目标,0).mi_trace(V, _):-var(V), !, throw(error(instantiation_error
..
好的,我知道这是一个非常笼统的问题,并且已经写了一些关于这个主题的论文,但我觉得这些出版物涵盖了非常基本的材料,我正在寻找更先进的东西来改进风格和效率.这就是我在纸上的内容: “研究报告 AI-1989-08 Efficient Prolog:实用指南",Michael A. Covington,1989 年 Timo Knuutila 的“高效 Prolog 编程",1992 年 “P
..
我在 Lee Naish 的论文中遇到了一些不熟悉的 Prolog 语法高阶逻辑在 Prolog 中编程.这是论文中的第一个代码示例: % 插入排序(简单版)排序([],[]).异类(A.As,Bs):-排序(As,Bs1),异类(A,Bs1,Bs).% 将数字插入排序列表插入(N,[],[N]).插入(N,H.L,N.H.L):-N =<H.插入(N,H.LO,H.L):-N>H,插入(N,L
..
假设我有以下 DCG 规则: 因子(X) -->“(",expr(X),“)". 通常会被翻译成: 因子(X, A, B) :-[40|C] = A,expr(X, C, D),[41|B] = D. 是否允许 Prolog 系统将其翻译如下,即 将统一合并为头部和目标? 因子(X, [40|A], B) :-表达式(X,A,[41|B]). 如果 DCG 扩张不坚定,就不会被
..
Prolog 运算符 ^ 是什么? 查看 Prolog 内置指令op 给出了内置运算符的列表. 我明白了 ** 是 求幂 /\ 是 或 但是 ^ 是什么? 当前三个答案中的每一个都很有价值,我学到了一些东西: 罗伊的书 示例为 false 我接受了 CapelliC 的回答,因为它明确了 ^/2 具有多种含义 取决于上下文,这立即消除了我的困惑.
..
在线是否有关于 Prolog 语言(语法和语义)的描述? 有很多实现参考手册.但这些都不是语言描述.例如 SWI Prolog 手册 状态 本手册没有描述 Prolog 的完整语法和语义. 和 指 一套印刷在纸上的书籍,出版于十九世纪八十年代.对于 ISO 标准,这是为了钱,“应该从我国的 ISO 代表处获得"的胡言乱语. 解决方案 ISO标准以极低的价格提供(目前USD
..
我是 Prolog 的新手,但我被这个看似简单的命令所困.我已经加载一个没有错误的知识库,每当我尝试做 assert(甚至是 help)我收到以下消息: 未捕获的异常:error(existence_error(procedure,assert/1),top_level/0){2} 我到底错过了什么?赞赏. 解决方案 使用 assertz/1 或 asserta/1 代替.GNU-Pr
..
标准术语顺序(ISO/IEC 13211-1 7.2 术语顺序)定义在所有术语上——包括变量.虽然这个有很好的用途——想想 setof/3 的实现,这使得 8.4 术语比较中内置函数的许多其他干净和合乎逻辑的使用变成了与 imps(命令式构造的缩写形式)的声明性噩梦.8.4 词条比较特征: 8.4 词条比较 8.4.1 (@=8.4.2 compare/3. 8.4.3 sort/2
..
我是 Prolog 的新手,注意到 ' 和 " 给出不同的行为,但很好奇为什么.具体来说,在加载文件时,?- ['test1.pl']. 有效, 而 ?- ["test1.pl"]. 没有. 解决方案 单引号的项目总是原子. 双引号的含义取决于Prolog标志double_quotes: 原子 —使用此值 “a";= 一个.如今,这很少使用.但是你会发现写有 ["abc.pl"
..
Javascript 作为其他编程语言的实现语言似乎变得流行起来.文章(C)LP 到 JavaScript 的轻量级编译.ICLP 2012引起了我的注意. 网上有很多用 Javascript 编写的 Prolog 系统的概念验证原型. 什么是当前的、积极维护的、最好是用 Javascript 编写的符合 ISO 的 Prolog 系统? 解决方案 我所知道的 JavaScri
..
我在看书时遇到了问题.我看到一个程序使用谓词“简单"(我猜是 simple/1 ).我不知道这个谓词是什么意思,我在控制台中用 ?-help(simple) 找不到它.但是当我尝试在控制台中进行一些查询时,它的工作方式如下: 5 ?- 简单(p(x)).错误的.6 ?- 简单(mia).真的.7 ?- 简单(米娅).真的.8 ?- 简单(f(Mia)).错误的. 我想这是确定参数是术语(或变量
..
我在 Prolog 中定义过程时遇到问题.我有两个源文件,想用它们咨询 Prolog 引擎.这可以通过调用 Prolog 作为 swipl -g “['1.pl','2.pl'] 来完成. 这两个文件都是由用另一种编程语言编写的另一个程序生成的,我无法事先预测文件的确切内容. 问题是在其中一个文件中总是有一个规则 predicate1(X):-predicate2(X). 但是,有
..
有没有办法列出在 SICStus Prolog 的给定库模块中定义的所有谓词? 例如如果我加载列表模块: |?- use_module(library(lists)). 是否可以从提示中运行另一个谓词来告诉我刚刚导入了哪些谓词? 解决方案 这适用于 SWI-Prolog,但谓词 current_predicate/1 被标记为“ISO",所以至少在 SISTUS 中尝试一下.这是
..
Common Lisp 允许通过条件和重启进行异常处理.粗略地说,当一个函数抛出异常时,“捕获者"可以决定“抛出者"应该如何/是否继续进行.Prolog 是否提供类似的系统?如果不是,是否可以在现有谓词之上构建一个来遍历和检查调用堆栈? 解决方案 Prolog 的 ISO/IEC 标准只提供了一个非常基本的异常和错误处理机制,它或多或少地与 Java 提供的相当,与 Common Lisp
..
我刚刚在 SWI Prolog 手册 其中指出: `or' 谓词定义为:目标1;_Goal2 :- 目标 1._目标1;目标 2:- 目标 2. 这是否意味着 ;/2 的行为就像我们编写自己的由两个规则组成的辅助谓词一样?我记得 ;/2 是一个不纯的结构(但我有可能将它与 if-then-else 混在一起),但这个定义是纯的(虽然是元逻辑的). ;/2 的语义在 ISO 标准的第 7.
..
我有这段代码: % 家谱女(笔).男(汤姆).男(鲍勃).女(丽兹).女(拍拍).女(安).男(吉姆).父母(帕姆,鲍勃).父母(汤姆,鲍勃).父母(汤姆,莉兹).父母(鲍勃,安).父母(鲍勃,帕特).父母(帕特,吉姆). 我收到此错误: 警告:female/1 的子句在源文件中不在一起警告:male/1 的子句不在源文件中 这个错误的目的是什么? 我的意思是,文件确实编译并运行得很好,
..
我正在为 integer/1 使用 SWI-Prolog. ISO/IEC 13211-1 给出了 integer 的 BNF 定义,整数的替代方法之一是 字符代码常量. 我能够使用 integer/1 创建和测试所有其他替代方案的示例,但是对于 character code constant 我无法创建有效示例.(见下文) 如何使用 整数/1? 回答 感谢@fals
..
考虑一个(元逻辑)谓词 var_in_vars(Var, Vars),它接受一个变量 Var 和一个变量列表 Vars 和如果 Var 出现在 Vars 中,则成功.所以我们不需要保证 Var 是一个变量,也不需要保证 Vars 是一个变量列表. 在 ISO Prolog 中表达这一点的最紧凑和最规范的方式是什么?这是 ISO/IEC 13211-1 中的内置程序概述:1995 包括 Cor
..