В первой части стандарта ISO для Prolog, ISO/IEC 13211-1:1995, понятие "тип" используется для обозначения разных вещей. Это часто приводит к путанице. Например, страница с именем IsoErrata (заархивированная версия, источник) (обратите внимание, что эта страница не связана с ISO):
7.12.2 и 8.1.2.1
Существует путаница в том, что такое "тип" . Кажется, есть 3 разные группы:
- Те, которые перечислены в 8.1.2.1, а также выполняются как ValidTypes в терминах type_error в 7.12.2.b
- Те, которые перечислены в 8.1.2.1 и встречаются как ValidDomain в терминах domain_error в 7.12.2.c
- Те, которые указаны только в 8.1.2.1
Кроме того, существуют ValidDomains в 7.12.2.c, которые не указаны в 8.1.2.1, предположительно по ошибке (например, io_mode).
8.14.3.3.f
Для третьего шаблона требуется тип
atom_or_atom_list
, но, как ни странно, требуемыйtype_error(list,Operator)
. Это приводит к (см. Примеры)
op(30,xfy,0) =====> error(type_error(list,0))
где
type_error(atom,0)
илиtype_error(atom_or_atom_list,0)
будет более подходящим (но обратите внимание, чтоatom_or_atom_list
не входит в число ValidTypes, перечисленные в 7.12.2!). Поэтому для ECLiPSe мы выбралиtype_error(list,Op)
, только еслиOp
является неправильным списком иtype_error(atom,Op)
, еслиOp
- любой другой неатом.
Итак, в каком смысле используется "тип" и что делать с этой путаницей?