The working draft for TR 13211-3 of 2012-07-13 remains internally inconsistent, introduces a new inaccurate translation, and contains many formulations unsuited for a normative document. Its very late publication (originally scheduled 2011-11-01, effectively distributed 2012-06-13), makes more thorough comments impossible.
Previous comments on version of 2010-04-01 and on version of 2010-07-18 have been ignored for many issues. That is, the new editor did not take into account those comments within more than two years.
The current version also ignores or incompletely follows the resolutions of Lexington 2011 and Edinburgh 2010. In particular A3:2011 (incomplete, a rule is missing), A4:2011 (ignored), A5:2011 (incomplete, e.g. ('|')//2 is missing).
phrase1//0
in 7.14.3.3 is not steadfast. So
the document contains incorrect examples.
(-->)/2
,
{}/1
,
(;)//2
,
(->)//2
,
!//0
,
(\+)//1
but it uses often a different, sometimes even
syntactically invalid notation. E.g.
6.3,
7.14.2,
7.14.5.1,
7.14.6.2,
7.14.6.3,
7.14.6.4,
7.14.6.5.
Syntactically, there are no changes w.r.t. the ISO/IEC 13211-1 Prolog standardThere are changes w.r.t. the operator syntax. That's why there has been Cor.2.
op(1105,xfy,'|')
is still missing.
Priority Specifier Operator(s) 1105 xfy
'|'
dynamic/1
: Grammar rules shall not be misused to generate
clauses of predicates, which then shall be subject to database
manipulation, although this is part of the reality. ...
This is not a normative text. Same for the entire 7.4.2. What means
"shall not be misused". What means misused?
"legal"?, and what about several non-terminal indicators, and what about mixing them with predicate indicators?multifile/1
: To distribute grammar rules with some nonterminal indicator over several files is legal. A nonterminal indicator is therefore a legal argument tomultifile/1
.
NonTerminal
and RightHandContext
.
phrase1/2
contradicts the convention
established in 6.1.3.
phrase(phrase1, _, [])
and phrase(phrase1,
_, S), S = []
. The first goal will silently fail, while the
second goal will execute phrase2/2
. The Edinburgh 2010
minutes emphasize that "10 b. The translations should be steadfast".
... Assuming aA more precise reference to 3.142 is needed. Also,public/1
directive for declaring predicate scope, we could write::- public(sentence//0).
public/1
directives had a different meaning in
DECsystem 10 version 3.47. It was used "to make a compiled procedure
accessible from interpreted code (including directives) [...]."
IS 13211-1:1995 has a note in 7.5.3:
NOTE — An additional directive public/1 that specifies some user-defined procedures to be public would be an extension.
The title should rather read (',')//2 — concatenation. The format of presentation should be more similar to 7.8.5 (',')/2 - conjunction. There should be a declarative and a procedural description. The procedural description might simply refer to the expansion. Cut-transparency remains unexplained. The variable names are used without showing where they appear in a goal.
Same remarks for the other non-terminals.
('->')//2
(choice)
and (';')//2
.
Apart from syntax: The name choice is inappropriate and only the principal functor should be mentioned.
Implementations conforming to this DTR 13211-3 shall not define or use a predicate ('!')/2This is also true for all the other constructs.
Used the corrected latest version of Ulrich NeumerkelThis is inaccurate. The program lacks the following crucial clause in
dcg_cbody/4
!
dcg_cbody(( GREither ; GROr ), S0, S, ( Either ; Or )) :- \+ subsumes_term((_->_),GREither), dcg_body(GREither, S0, S, Either), dcg_body(GROr, S0, S, Or).
The program assumes that there is no control
construct (->)//2
. However, this WDTR seems to define such a
control construct in 7.14.6.3.
Also, the font used in this clause is not suited to represent Prolog
text and in particular (-->)/2
accurately.