- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试深入研究以下的 GNU Prolog 行为:
test(X,I,O) :- phrase(X,I,O).
?- test(("a",!,"b"),"ab","").
有没有标准的方法来查看 phrase/3 翻译了什么?
根据ISO DCG提案(*),有要求我们将有一个 expand_term/2。现在我可以用它来检查:
?- expand_term((foo --> "a", !, "b"),X).
X = (foo([97|A],B):-!,A=[98|B])
这是否告诉我 phrase/3 在我的 test/3 中是如何使用的?
(*)ISO/IEC DTR 13211–3:2006
定子句语法规则
克劳斯·戴斯勒
2012 年 11 月 20 日
http://www.complang.tuwien.ac.at/ulrich/iso-prolog/dcgs/dcgsdin121120.pdf
最佳答案
Is there a standard way to see the what phrase/3 translates?
没有。定义了phrase/3
的含义,但后面的实际实现是不可访问的。 phrase/3
有几种不同的定义方式。它可以像 in YAP 一样简单:
phrase(P, S0, S) :-
call(P, S0, S).
或者它可以使用 expand_term/2
(或类似的东西)。即:
phrase(P, S0, S) :-
expand_term(( pseudont --> P ), ( pseudont(CS0, CS) :- Goal) )),
S0 = CS0,
S = CS,
Goal.
它可以在调用Goal
之后执行最后的统一:
phrase(P, S0, S) :-
expand_term(( pseudont --> P ), ( pseudont(CS0, CS) :- Goal) )),
S0 = CS0,
Goal,
S = CS.
通过引入(依赖于实现的)约定,扩展谓词总是在最后一个参数中使用未实例化和未别名的变量调用,这将允许在半上下文存在的情况下进行尾递归。
这完全取决于实现者。
Does this tell me how phrase/3 is used in my test/3?
没有,没有办法说。
但是,你为什么要问?或者,换句话说:
What effect could a differing but conforming implementation of
phrase/3
have?
这应该是显而易见的。考虑 ?- phrase([],Xs).
,它不会在 YAP 的堆上创建任何术语,但会为上面的朴素 expand_term
扩展创建任何术语。但是,资源消耗超出了当前标准的范围。
考虑 YAP 中规则的主体 ..., phrase([], Xs, Xs), ...
:Xs
仍然是局部变量,而一个基于 expand_term
的短语使其成为全局性的。在许多实现中,这会影响变量的相对顺序。现在,标准在 7.2.1 中明确指出:
If X and Y are variables which are not identical then
X term_precedes Y shall be implementation dependent
except that during the creation of a sorted list (7.1.6.5,
8.10.3.1 j) the ordering shall remain constant.
所以这又不是问题,但这仍然可能很烦人。
Prolog 标准(即 ISO/IEC 13211-1 第 1 部分)仅定义了 NSTO 的执行。也就是说,如果在执行期间发生的所有统一都是 NSTO — 不受发生检查的约束(参见 7.3.3)。
现在,考虑您的情况:phrase(("a",!,"b"), Xs, Ys)
。乍一看,这等同于 phrase("ab", Xs, Ys)
。但现在考虑假设 set_prolog_flag(double_quotes,chars)
?- Xs = [c|_], Xs = Ys, phrase(("a",!,"b"), Xs, Ys).
毫无疑问,这个查询应该会失败。但它是 NSTO 吗?天真地,我们可以假设这可以被替换为:
?- Xs = [c|_], Xs = Ys, Xs = [a,b|Ys].
相当于:
?- Xs = [c|_], Xs = [a,b|Xs].
显然,Xs = [a,b|Xs]
本身就是 STO(受制于发生检查)。而且两者加起来都是STO!要理解这一点,请考虑 7.3.2 中的 Herbrand 算法。本质上,它不确定地“以任何顺序”重写方程。这是一个这样的推导:
Xs = [c|Zs], Xs = [a,b|Xs].
(7.3.2 f) Xs = [c|Zs], [c|Zs] = [a,b,c|Zs].
(7.3.2 d) Xs = [c|Zs], c = a, Zs = [b,c|Zs].
(7.3.2 g) failure (not unifiable, positive occurs-check)
当然,这种推导是不寻常的。通常,在 c = a
存在的情况下会立即失败,但该算法在这方面是不确定的。只有当所有可能的推导都不会导致 7.3.2 g 时,一组方程才是 NSTO。引用7.3.3:
A set of equations (or two terms) is "not subject to
occurs-check" (NSTO) iff there exists no way to proceed
through the steps of the Herbrand Algorithm such that
7.3.2 g happens.
这些结构也可能受到影响。虽然现有标准文件目前未涵盖它们,但了解潜在影响仍然具有相关性。考虑:
?- freeze(L, (X=1;X=2)), phrase(("a",!,"b"),L).
L = [a,b], X = 1.
B、SICStus、SWI、YAP 都产生了这个答案。所以削减很重要。
无论如何,感谢您的提问——我只是在回答您的问题时才了解 NSTO 问题!这显然对 DCG 翻译的制定方式产生了一些影响。
关于prolog - 查看 phrase/3 翻译的标准方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14140678/
我想用 phrase 搜索和替换任何出现的 {phrase}使用 rails(erb.html 文件)。需要替换多个短语,并且事先不知道这些短语。 完整示例: Hi {guys}, I really
如果您在内容辅助激活时开始输入,内容辅助将仅根据起始字母过滤建议。 然而,假设有一个对象,我们需要查看它的任何方法是否在其名称的任何部分包含特定的短语(不仅仅是检查它们是否以该短语开头)。 有什么方法
我需要在名为 blog 的集合中搜索文档,该集合具有为标题、标签、摘要和正文定义的文本索引: @Document(collection="blog") public class Blog {
我需要在名为 blog 的集合中搜索文档,该集合具有为标题、标签、摘要和正文定义的文本索引: @Document(collection="blog") public class Blog {
我在 win 32 上运行 Python 2.5(r25:51908,2006 年 9 月 19 日,09:52:17)[MSC v.1310 32 位(英特尔)] 当我问 Python 时 >>>
我试图从一个长文本中提取一系列全部大写的单词。因此,在示例中: Here is a couple words of text. If you want more information please
我已经使用 StandandAnalyzer 实现了 RamDirectory,并将位置数据存储在 Lucene 缓存中,我已在 Lucene 中添加了数据,如下所示: final Document
好的,我有大约 68,000 个表需要用特定短语删除。当我运行命令时: 显示表,其中 table_name like '%phrase'; 我得到了我需要的所有结果,但我尝试运行以下代码,但它只删除了
我使用 ElasticSearch 5.1.2 作为 Heroku 的 Searchly 插件,带有 nodeJS 包 ( https://github.com/elastic/elasticsear
我有一个 Elasticsearch 索引,其中包含一些数据。我实现了 did-you-mean 功能,因此当用户写错拼写的内容时,它可以收到包含正确单词的建议。 我使用短语 suggester 是因
我正在寻找一种在 KDB 中编写功能选择的方法,以便仅当列存在时才应用 where 短语(为了避免错误)。如果该列不存在,则默认为 true。 我试过了,没用 enlist(|;enlist(in;`
目前,我在 JavaScript 中使用以下正则表达式来匹配和计算字符串中的单词。与此 ReEx 完美配合: 正则表达式: var pickRegExp = /[^\W\d]+[\u00C0-\u01
在 elasticsearch 中,我正在构建过滤查询以查找包含 的文档。两个一个短语和一个术语。以下查询不起作用。它似乎使用查询数组中的项目返回结果,但好像应用了“或”运算符。 编辑:由于我使用的是
我创建了两个相等的api,就像从Elastic搜索中搜索filelds一样: 例如:如果 flex 搜索中的“queuename”字段具有诸如queue,queue1,queue2和3queue之类的
elastic search suggestor 不删除不需要的空间使用的查询... POST /_search { "_source": false, "suggest": { "t
我的一位客户是一家专门从事新闻摄影(嗯,还有八卦)的摄影机构,因此他们的许多客户的搜索都围绕着特定的人展开。 我们索引了大约 150 万个文档,对标题和标题进行全文搜索;和全文搜索,无需词干标签。我们
我正在尝试深入研究以下的 GNU Prolog 行为: test(X,I,O) :- phrase(X,I,O). ?- test(("a",!,"b"),"ab",""). 有没有标准的方法来查看
我有一个充满短语(80-100 个字符)和一些较长文档(50-100Kb)的数据库,我想要给定文档的短语排名列表;而不是搜索引擎的通常输出,而是给定短语的文档列表。 我以前用过MYSQL全文索引,也研
我想要实现的目标是找到一个好的 word_and_phrase 嵌入模型,它可以做到:(1) 对于我感兴趣的词和短语,它们有嵌入。(2) 我可以使用嵌入来比较两个事物(可以是单词或短语)之间的相似度
我正在寻找一种从文本文档中提取“重要短语”的方法。希望使用 Spacy 做到这一点,但有一个警告:我的数据主要包含产品信息,因此重要的短语与自然口语中的短语不同。出于这个原因,我想在我自己的语料库上训
我是一名优秀的程序员,十分优秀!