В качестве наиболее доступного руководства по языку LISP я бы рекомендовал книгу Уинстона и Хорна [Winston and Horn, 1988], а в книгах Чарняка [Charniak et al., 1987] и Грехема [Graham, 1994] можно уточнить многие детали применения LISP для решения задач искусственного интеллекта.
В прекрасной книге Норвига [Norvig, 1992] подробно описан базовый диалект Common LISP, а в книге Рассела и Норвига [Russel and Norvig, 1995] основное внимание уделено программированию задач искусственного интеллекта.
В книге Кратко [Braico, 1990] читатель найдет обширный материал по использованию языка PROLOG для решения задач искусственного интеллекта. Кроме того, желающим изучить язык PROLOG я также рекомендую прочесть книгу Стерлинга и Шапиро [Sterling and Shapiro, 1994].
Упражнения
1. Что означает понятие "символ" применительно к проблематике искусственного интеллекта? Являются ли символами изображение и слово?
2. Что представляет собой гипотеза физической символической системы! Является ли она, по вашему мнению, правдоподобной?
3. Пусть L — список
(а (b) с ((d) е (f) g).
Какое значение вернет следующее выражение, состоящее из вложенных функций: first(first(rest(rest(rest(L))))).
Запишите приведенное выше выражение в синтаксисе примитивов LISP.
4. Пусть функция f определяется следующим образом:
f(X Y) = (ЛX)(if Y = 0 then 1, else X f(X, Y - 1)).
Какое значение будет иметь такое применение этой функции:
f(2 3) ?
Запишите приведенное выше выражение в синтаксисе примитивов LISP.
5. Усовершенствуйте приведенную в тексте программу анализа соответствия таким образом, чтобы она могла обрабатывать списки с произвольной вложенностью. Эта программа должна быть способна, например, показать, что список
(lisp (a functional language)
(invented by (John mccarthy)))
соответствует образцу
(lisp (a ? language) (invented by (? mccarthy))),
но не соответствует образцу
(lisp (a ? language) (invented by (тагу ?))).
6. Усовершенствуйте приведенную в тексте программу анализа соответствия таким образом, чтобы она возвращала подстановку значений для переменных, которая будет превращать образец в пример. Образец для переменной имеет в таком случае вид
(? Variable-name),
и тогда образцу
(at (? X) (? Y))
будет соответствовать пример
(at robot room),
а программа должна вернуть подстановку
( (X robot) (Y room))
в виде списка. Можно положить, что пример представляет собой простой список.
7. Скомбинируйте программы, разработанные в упр. 5 и 6, таким образом, чтобы результирующая программа могла обрабатывать вложенные списки и формировать подстановку. Эта программа должна быть способна, например, показать, что список (lisp (a functional language) (invented by (John mccarthy))) соответствует образцу