2.10.5. ПОИСКИ

Тропа

S" $iter S' :: He R

означает, что для переменных из He следует подобрать такие значения, что попытка вычислить R успешно завершится. При этом полученный результат и будет результатом всей конструкции.

Если жесткое выражение He - пустое, оно может быть опущено вместе с ключевым словом "::". Если хвост R является огражденной пустой тропой (всегда вырабатывающей пустое выражение), он может быть опущен.

S" $iter S' =>=> S" $iter S' :: ,

S" $iter S' R =>=> S" $iter S' :: R

S" $iter S' :: He =>=> S" $iter S' :: He ,

Источник S" служит для вычисления начальных значений переменных из He, а источник S' служит для вычисления новых значений переменных из He на основе их предыдущих значений.

Считается, что источники S" и S' находятся на нулевом уровне.

Подбор значений переменных делается следующим образом. Сначала для переменных вычисляются начальные значения. Для этого вычисляется значение источника S" и полученное объектное выражение Oe сопоставляется с образцом He. Затем делается попытка вычислить R в новой среде. Если эта попытка заканчивается неуспехом $fail(0), то вычисляется S' и полученное объектное выражение вновь сопоставляется с He, после чего опять делается попытка вычислить R и.т.д.

S" $iter S' :: He R =>=>

S" :: He, \{ R; S' $iter S' :: He R; }

Например, если значения переменных eA и eB еще не определены, перестройка

eX : $l eA eB,

<Writeln eA>, <Writeln eB> $fail

эквивалентна поиску

()(eX)

$iter \{ eB : t1 e2 = (eA t1)(e2); }

:: (eA)(eB),

<Writeln eA>, <Writeln eB> $fail