Welche Bedeutungen von "type" werden im Standard verwendet?

8

Im ersten Teil des ISO-Standards für Prolog, ISO / IEC 13211-1: 1995, wird der Begriff "Typ" für verschiedene Dinge verwendet. Dies führt oft zu Verwirrung. Zum Beispiel eine Seite namens IsoErrata ( archivierte Version , < a href="http://eclipseclp.org/wiki/Prolog/IsoErrata"> Quelle ) (stellt fest, dass diese Seite nicht mit ISO verwandt ist):

  

7.12.2 und 8.1.2.1

     

Es gibt eine Verwirrung darüber, was ein "Typ" ist. Es scheint 3 zu sein   verschiedene Gruppen:

     
  • Diejenigen, die in 8.1.2.1 aufgeführt sind und auch als ValidTypes in type_error-Termen in 7.12.2.b
  • vorkommen   
  • Diejenigen, die in 8.1.2.1 aufgelistet sind und als gültige Domain in termance_error in 7.12.2.c
  • vorkommen   
  • Diejenigen, die nur in 8.1.2.1 aufgeführt sind
  •   

Darüber hinaus gibt es in 7.12.2.c ValidDomains, die nicht aufgelistet sind   8.1.2.1, vermutlich versehentlich (zB io_mode).

     

8.14.3.3.f

     

Die Vorlage benötigt den Typ atom_or_atom_list für das 3. Argument, aber seltsamerweise ist der erforderliche Fehler hier   %Code%. Dies führt zu (siehe Beispiele)

     

type_error(list,Operator)

     

wo op(30,xfy,0) =====> error(type_error(list,0)) oder type_error(atom,0) passender wäre (beachte aber, dass type_error(atom_or_atom_list,0) nicht zu den   ValidTypes aufgelistet in 7.12.2!). Für ECLiPSe haben wir uns deshalb entschieden    atom_or_atom_list nur, wenn type_error(list,Op) eine falsche Liste ist und    Op wenn type_error(atom,Op) ein anderes Nicht-Atom ist.

Also in welchen Bedeutungen wird "Typ" verwendet, und was soll man über die obige Verwirrung tun?

    
false 03.06.2014, 14:11
quelle

1 Antwort

6

Es gibt im Wesentlichen drei verschiedene Verwendungen für "type" in ISO / IEC 13211-1:

  1. Typen wie in 7.1 Arten definiert. Diese sind: Variable (7.1.1), Ganzzahl (7.1.2), Fließkomma (7.1.3), Atom (7.1.4), zusammengesetzter Ausdruck (7.1.5) und einige Typen, die auf diesen basieren. Die nächsten beiden Verwendungen beziehen sich häufig auf 7.1 oder auf die Terminologie (3 Definitionen) für ihre Definition. Wichtig ist, dass hier Variablen enthalten sind. Diese Klassifizierung wird durch Prologs Syntax motiviert:

      

    7.1 Arten

         

    Der Typ eines Begriffs wird durch seine abstrakte Syntax (6.1.2) bestimmt.

  2. Typen wie in 7.12.2 definiert b. Dies sind die Typen, die in Typfehlern der Form type_error(ValidType, Culprit) verwendet werden. Beachten Sie, dass Variablen nun nicht mehr enthalten sind, da diese entweder als Instanziierungsfehler (7.12.2 a) oder als Deinstallationsfehler (7.12.2 k, Cor.2 ).

      

    ValidType ∈ { atom, atomic, byte, callable, character, compound, evaluable, float, in_byte, in_character, integer, list, number, pair, predicate_indicator }

  3. Typen wie in der Unterkapitel Vorlage und Modi:

      

    8.1.2.1 Art eines Arguments

         

    Der Typ jedes Arguments wird durch eines der folgenden Atome definiert:    atom, atom_or_atom_list, atomic, byte, callable_term, character, character_code, character_code_list, character_list, clause, close_options_list, compound_term, evaluable, flag, head, in_byte, in_character, in_character_code, integer, io_mode, list, nonvar, number, operator_specifier, predicate_indicator, read_options_list, source_sink, stream, stream_options_list, stream_or_alias, stream_position, stream_property, term, write_options_list

Das obige Zitat erwähnt nur 7.12.2 und 8.1.2.1 und wie sie zueinander in Beziehung stehen. Das braucht also etwas mehr Ausarbeitung:

Arten von 7.12.2 werden mit Typfehlern gemeldet. Aber Typen in 8.1.2.1 dienen nur in der Untergruppe Template und Modes des Definition eines eingebauten . Sie sind nicht per se geeignet, um für Fehler verwendet zu werden. In einer konkreten Definition eines integrierten Prädikats gibt es eine Unterklausel xyz2 Template und Modi und xyz3 Fehler . Hier sind einige Beispiele für Typen von 8.1.2.1 (fett in der obigen Liste).

write_options_list

Es gibt keine direkte Eins-zu-eins-Entsprechung zwischen write_options_list und den in den Fehlern verwendeten konkreten Typen. Stattdessen wird ein Typ list und eine Domäne write_option verwendet. Daher wird der komplexe Typ write_option_list niemals signalisiert:

  

8.14.2.2 Vorlage und Modi

     

write_term(@stream_or_alias, @term, @write_options_list)

     

8.14.2.3 Fehler

     

...

     

c) Options ist weder eine Teilliste noch eine Liste
  - type_error(list, Options).

     

...

     

e) Ein Element E der Options Liste ist weder ein
  Variable noch eine gültige Schreiboption
  - domain_error(write_option, E).

atom_or_atom_list

Das ist noch komplexer. Auf der einen Seite wird eine Atomliste erwartet, aber auch ein Atom ist in Ordnung. Also haben wir list und atom als relevante Typen:

  

8.14.3.2 Vorlage und Modi

     

op(+integer, +operator_specifier, @atom_or_atom_list)

     

8.14.3.3 Fehler

     

...

     

f) Operator ist weder eine Teilliste noch eine Liste noch   ein
Atom
- type_error(list, Operator).

     

g) Ein Element E der Operator Liste ist weder eine
Variable noch   ein Atom
- type_error(atom, E).

Es ist ebenso plausibel, atom für den Fehler f zu erzeugen. Auf der anderen Seite sind beide Fehler gleichermaßen anwendbar, und list ist definitiv die beste für missgebildete Listen wie [a|nonlist] , während atom nicht unbedingt besser für 111 ist, was ein OCR-Fehler von [l] sein könnte.

callable_term

Der entsprechende Typfehler enthält callable . Wie in

  

8.10.1.2 Vorlage und Modi

     

findall(?term, +callable_term, ?list)

     

8.10.1.3 Fehler

     

...

     

b) Ziel ist weder eine Variable noch ein aufrufbarer Term     - type_error(callable, Goal) .

in_character_code

Es gibt weder einen entsprechenden Typ in 7.12.2 b, noch eine Domäne in 7.12.2 c. Aber in 7.12.2 f ist es für Darstellungsfehler definiert:

  

8.12.1.2 Vorlage und Modi

     

...
get_code(?in_character_code)
get_code(@stream_or_alias, ?in_character_code)

     

8.12.1.3 Fehler

     

...

     

j) Code ist ein Integer, aber kein In-Character-Code
(7.1.2.2)

  - representation_error(in_character_code).

io_mode

Dieses ist in 8.1.2.1 aufgeführt, im Gegensatz zum zitierten Text. Es erscheint auch in 7.12.2 c und wird verwendet:

  

8.11.5.3 Fehler

     

...

     

h) Mode ist ein Atom, aber kein Ein- / Ausgabemodus
-    domain_error(io_mode, Mode).

character_code_list

Ähnlich wie write_options_list . Es wird jedoch fälschlicherweise in 7.12.2 c erwähnt. Das ist ein Fehler im Standard, der in Cor.3: 2017 entfernt wurde .

    
false 03.06.2014, 14:11
quelle

Tags und Links