ВУЗ:
Составители:
138
из второго обратно в первый, снова из первого во второй и так до бесконечности. Придется нам
несколько усложнить правило переливания. Введем в число параметров правила еще один; список
всех пройденных состояний, подобно тому, как это делалось при решении задачи о построении
домика. Каждое новое состояние будем проверять на принадлежность этому списку.
Теперь правило «перелить» будет выглядеть так:
перелить (В_ первом, Во_ втором, В_ третьем, Пройденные):-
объемы (Объем 1, Объем 2, Объем 3),
В_ первом > 0,
Свободно is Объем 2 - Во- втором,
Свободно > 0,
минимум (В- первом, Свободно, Количество),
Стало_ в_ первом is B_ первом- Количество,
Стало_ во_ втором is Bo_ втором + Количество,
Новое = сост (Стала_ в_ первом, Стало_ во_ втором, В_ третьем),
не_ является__ элементом (Новое, Пройденные),
перелить (Стало_ в_ первом, Стало_ во_ втором, В_ третьем).
Факт «перелить (5, 5, 0)» надо также изменить, так как мы ввели дополнительный параметр.
Теперь он будет записываться так:
перелить (5, 5, 0, Пройденные).
Вот теперь в ответ на запрос
?- перелить (10. 0, 0
?
О)
Пролог выдаст ответ, но ответ обескураживающий: «Да»-. Пролог доказал, что существует
последовательность переливаний, приводящая из исходного состояния в конечное. Для того чтобы
вывести эту последовательность, надо предпринять специальные действия, а именно заменить факт
перелить (5, 5, 0, Пройденные)
На правило
перелить (5, 5, 0, Пройденные):-Write
(Пройденные).
Теперь наша программа полностью завершена и при вводе за* проса выдаст все возможные
алгоритмы переливания. Всего, как
из второго обратно в первый, снова из первого во второй и так до бесконечности. Придется нам
несколько усложнить правило переливания. Введем в число параметров правила еще один; список
всех пройденных состояний, подобно тому, как это делалось при решении задачи о построении
домика. Каждое новое состояние будем проверять на принадлежность этому списку.
Теперь правило «перелить» будет выглядеть так:
перелить (В_ первом, Во_ втором, В_ третьем, Пройденные):-
объемы (Объем 1, Объем 2, Объем 3),
В_ первом > 0,
Свободно is Объем 2 - Во- втором,
Свободно > 0,
минимум (В- первом, Свободно, Количество),
Стало_ в_ первом is B_ первом- Количество,
Стало_ во_ втором is Bo_ втором + Количество,
Новое = сост (Стала_ в_ первом, Стало_ во_ втором, В_ третьем),
не_ является__ элементом (Новое, Пройденные),
перелить (Стало_ в_ первом, Стало_ во_ втором, В_ третьем).
Факт «перелить (5, 5, 0)» надо также изменить, так как мы ввели дополнительный параметр.
Теперь он будет записываться так:
перелить (5, 5, 0, Пройденные).
Вот теперь в ответ на запрос
?- перелить (10. 0, 0? О)
Пролог выдаст ответ, но ответ обескураживающий: «Да»-. Пролог доказал, что существует
последовательность переливаний, приводящая из исходного состояния в конечное. Для того чтобы
вывести эту последовательность, надо предпринять специальные действия, а именно заменить факт
перелить (5, 5, 0, Пройденные)
На правило
перелить (5, 5, 0, Пройденные):-Write
(Пройденные).
Теперь наша программа полностью завершена и при вводе за* проса выдаст все возможные
алгоритмы переливания. Всего, как
138
Страницы
- « первая
- ‹ предыдущая
- …
- 136
- 137
- 138
- 139
- 140
- …
- следующая ›
- последняя »
