Сегодня у моих студентов («Программирование для искусственного интеллекта», 4-й курс) была контрольная работа. Ассистентка придумала для них задачку на кулинарную тему — требовалось составить программу на Прологе, совершающую логический вывод в базе знаний, где хранятся сведения о том, какими продуктами располагаем и что из чего готовится.
Одна студентка спросила, можно ли продукты в программе назвать на болгарском, на что я правдиво ответил: «Можно на любом из существующих». Десять человек (чуть больше половины), однако, решили дать атомам и предикатам английские имена. Такая старая программистская традиция.
При этом выяснилось, что как на оном наречии зовут воду, сыр и яйца, знают 100%; ветчину и муку — 50%; дрожжи и тесто — 0%. Это последнее у одного названо kneading (!), у одного — pasta, у остальных — testo. Слово powder применено один раз к муке и один — к дрожжам. Один ветчину назвал meal. А ham and eggs («хемендекс» по-болгарски, слово вроде общеизвестное) дважды названы hemendex, а один раз даже hemengdex. Вот так.
Еще кое-что из нарочно не придуманного (для облегчения восприятия болгарские слова заменяю русскими):
- if X has eggs, muka, water, drozhzhi, then X can make testo.
‹а что из него потом делать? Ясное дело, макароны!› - if X has testo and nachinka, then X can make pizza.
‹“ничего, что я по-английски?”› - if X has eggs and vetchina, then X can make hemengdex.
‹сказала бы «vetchina and eggs», может, сообразила бы, что означает это самое «-ендекс», а впрочем, может, и нет›
И последнее, к английскому языку уже не относящееся. Уникальный способ узнать, есть ли в базе данных факт q( b):
?- retract( q( b)), assert( q( b)).То есть: «Чтобы определить, известно ли тебе что-нибудь, попробуй забыть (чего не знаешь, того не забудешь), но потом снова узнай». Это все равно что вылить воду из стакана, а потом налить обратно, чтобы узнать, есть ли она в нем.