Исходный текст для алгоритма находится на стр.6 первоисточника (ксерокопию страницы см. в приложении).
Алгоритм верхнего уровня закодирован классифицирующей функцией rock_type.
Именно эту функцию надо вызывать чтобы классифицировать образец.
Перечислим предикаты (в порядке применения) применяемые к образцу, чтобы выяснить к какой конкретной классификации перейти:
pyroclastic()
VPC_carbonates()
VPC_melilite()
VPC_kalsilite()
kimberlite()
lamproite()
VPC_leucite()
lamprophyre()
charnockite()
plutonic()
volcanic()
Всё это одноместные предикаты. 4 предиката основаны на модальном минеральном составе образца (они начинаются с VPC).
Определения предикатов верхнего уровня ещё не даны. Но предполагается, что они не являются фундаментальными предикатами формальной теории и у образца будут указаны "физические" характеристики на основе которых будет дано их определение.
Большинство предикатов непосредственно употребляются в тексте первоисточника и так как сам текст написан в стиле алгоритма его формализация выполнена "один к одному" (см. часть кода программы озаглавленную '2.1.3 "Using the classification", page 6').
Но в двух случаях пришлось сделать предположения. Заодно рассмотрим "преобразование" текста в код.
Случай 6-1.
Текст:
"(1) if the rock is considered to be of pyroclastic
origin go to section 2.2 “Pyroclastic Rocks
and Tephra” on p.7
"
Чтобы не вводить предикат "pyroclastic_origin" предположим, что
Предположение 6-1: Tephra является pyroclastic.
И инструкция выглядит так:
if pyroclastic(sb1) then goto 202;
Случай 6-2.
Текст:
"(7) if the rock contains modal leucite go to
section 2.8 “Leucite-bearing Rocks” on p.18
"
Теоретически "contains" может означать "значительное количество" (например >5%) пока же сделано предположение
Предположение 6-2: "contains" означает ">0".
И инструкция выглядит так:
if VPC_leucite(sb1)>0 then goto 208;
Проблема: Данные предположения должны быть выверены.