Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > LISP > Помогите написать примитивную экспертную систему


Автор: Actosunc 27.3.2010, 20:26
Требуется написать небольшую экспертную систему. Она должна получать на заданный ряд вопросов ответ "да/нет" и проверять набор ответов на точное совпадение с заданными решениями. Если ответы ни с чем не совпадают, выдавать соответствующее сообщение.

Пример:

Вопросы:
1. крылья есть?
2. по воде плавает?
3. по суше ездит?

Решения (желательно их задание именно в таком формате):
самолет: 1,3
автомобиль: 3
катер: 2
амфибия: 2,3

Что интересно, примеров экспертных систем, чтобы хоть от чего-то отталкиваться, в интернете не нашел.

Автор: semka 27.3.2010, 21:24
Диалект лиспа вы не указали, так что решение на Scheme.
Проверял на MzScheme v4.2.4. В принципе должно работать на всех реализациях r5rs (да и r4rs тоже)

Код

(define has-wings 1)
(define swim 2)
(define walk 3)

(define plane (list has-wings walk))
(define car (list walk))
(define ship (list swim))
(define amphibian (list swim walk))

(define (examine input)
  (cond
   ((equal? input plane) "Plane")
   ((equal? input ship) "Ship")
   ((equal? input car) "Car")
   ((equal? input amphibian) "Amphibian")
   (#t "I don't know what's this")))

(define (prompt-user)
  (let ((input (list)))
    (display "Hi, i'm very strange expert system.")
    (newline)
    (display "It has wings? ")
    (if (y-or-n)
        (set! input (append input (list has-wings)))
        #f)
    (newline)
    (display "It can swim? ")
    (if (y-or-n)
        (set! input (append input (list swim)))
        #f)
    (newline)
    (display "It can walk? ")
    (if (y-or-n)
        (set! input (append input (list walk)))
        #f)
    (display (string-append "This is " (examine input)))
    (newline)))

(define (y-or-n)
  (eq? (read) 'y))

Автор: VH_ 27.3.2010, 22:12
Хювёнен-Сеппянен "Мир Лиспа" т.2 стр.217-232:
4.4 ДАРВИН
• Структура экспертной системы
• Представление знаний
• Машина вывода
• Факты и правила
• Правила вывода базы данных
• Стратегия обратного вывода
• Работа системы Дарвин
• Примеры запросов
• Расширение системы Дарвин
• Литература

Автор: Actosunc 28.3.2010, 18:44
semka, Common Lisp. Извините, что сразу не указал.


VH_, там нет рабочего примера, который можно скопировать и запустить. А я люблю учиться на таких.

Автор: k0rvin 28.3.2010, 20:16
Цитата(Actosunc @ 28.3.2010,  18:44)
semka, Common Lisp. Извините, что сразу не указал.
VH_, там нет рабочего примера, который можно скопировать и запустить. А я люблю учиться на таких.


в http://www.paulgraham.com/onlisp.html есть пример компиляции сетей подобных твоей -- вопрос-ответ:да/нет
а уж подогнать его(пример) под твои условия как нефик делать

Автор: Actosunc 30.3.2010, 21:44
k0rvin, не могу найти, какая страница?

Автор: k0rvin 31.3.2010, 17:30
Цитата(Actosunc @ 30.3.2010,  21:44)
k0rvin, не могу найти, какая страница?

Цитата

6. Functions as Representation 76
6.1. Networks 76
6.2. Compiling Networks 79
6.3. Looking Forward 81

Автор: learningToProgram 11.5.2015, 14:47
У меня не получается воспользоваться этим примером из книги в Emacs
Каким интерпретатором Вы пользовались?

Автор: cooper123 18.8.2015, 23:52
Цитата(Actosunc @ 27.3.2010,  20:26)
Требуется написать небольшую экспертную систему. Она должна получать на заданный ряд вопросов ответ "да/нет" и проверять набор ответов на точное совпадение с заданными решениями. Если ответы ни с чем не совпадают, выдавать соответствующее сообщение.

Пример:

Вопросы:
1. крылья есть?
2. по воде плавает?
3. по суше ездит?

Что интересно, примеров экспертных систем, чтобы хоть от чего-то отталкиваться, в интернете не нашел.

тут есть нечто похожее
http://www.podval.org/~sds/data/cllib.html

называется анимал.лисп

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)