Капитан Очевидность говорит нам, что пролог — специализированный язык для решения логических задач. Естественно, что описание этой задачи на нём быстрее.
Два первых условия:
1. Норвежец живёт в первом доме.
2. Англичанин живёт в красном доме.
Красный дом не может быть первым, потому что в красном доме живёт англичанин, а в первом доме живёт норвежец.
Я думаю в условии подразумевается, что двойной национальности нету неукого.
Хотел узнать для решения каких задач Вы обычно используете пролог?
Только академический интерес или же коммерческие разработки тоже существуют?
Не работал на прологе, поэтому такие вопросы.
Ну, в принципе язык интересный. Однако писать что-то практическое на нем сложно. Разве что использовать как часть какой-то системы принятия/поддержки решений. И даже в этом случае чаще используются другие решатели.
Но просто чтобы поиграть с логикой первого порядка — пролог замечательная вещь.
Может потому что мозг хранит информацию не битами, а отдельными значениями? это получается 125 единиц табличных данных, плюс 25 отдельных сущностей, плюс какой-то лог. А для того чтобы не насиловать мозг, можно сначала поупражняться на задачках размерностью 3 и 4.
Задачку даже с бумажкой и ручкой далеко не все могут решить однозначно — без предположений типа «допустим в этом доме...». А про решение в уме таки и вовсе… шахматисты, наверное, могут на раз-два)
Школьникам на олимпиадах по математике часто подобные задачки дают. В наших краях — с ограничением по времени в 4 часа на 8 задач. И ничего, многие решают менее чем за полчаса. Без всяких экселей.
Я решал на бумажке «методом судоку». Писал программу ни Си, которая делает тоже самое почти тем же методом. Жду пока кто-нибудь решениие на Brainfuck'е сделает, если это возможно, конечно.
Я пересекал не регекспы, а соответствующие им автоматы.
Давайте поясню. Вот есть у меня два регекспа
A: 1*
B: *2
С: 1*2
Пересечением A и B будет С. Вобщем, то это не сложно понятно. Их пересечением будет все, что начинается на 1, заканчивается на 2.
Но есть проблема — у меня нет правил как из A и B получить их пересечение C.
Для этого я беру автоматы для A и B (которые полностью эквивалентны регулярным выражениям) и строю их пересечение.
A:
B:
C:
Автомат C — то же самое что и регулярное выражение С.
1. Каждый день в домике, имеющем чётный номер, преподаватель собирает кубик Рубика, попивая молоко.
2. Преподаватель, программирующий на Хаскеле, иногда для смеха объявляет функцию tea — в честь своего любимого напитка.
3. Однажды преподаватель, играющий на скрипке, облил смычок своим любимым персиковым соком.
4. Преподаватель, чьё хобби — чистить трубы, программирует на функциональном языке программирования.
…
Кто разводит рыбок? Или решение загадки Эйнштейна регулярным языком