Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 21.04.2010
Сообщений: 50
1

Написание программы на ЛИСПе (Хищник и его свойства)

23.12.2013, 23:56. Показов 1169. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот задание:

Написать на алгоритмическом языке ЛИСП программу, реализующую экспертную систему определения вида хищника по его свойствам. Создать не менее 24 правил, позволяющих устанавливать, по крайней мере, три вида хищника

Сделать нужно, а я в этом ничего не понимаю....
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.12.2013, 23:56
Ответы с готовыми решениями:

Реализация циклов на Лиспе, Вложенные циклы на Лиспе
1)реализовать двумя способами (LET, LOOP, DO, DOTIMES) первая картинка 2)Согласно варианту...

Как писать программы на Лиспе?
Я раньше довольно неплохо программировал на различных языках, но сейчас мне понадобилось написать...

День добрый! Можете прокомментировать код программы на Лиспе
Помогите разобраться в коде) Множества заданы списками строк L1 и L2. Получить в виде списка L3...

Компонент пользователя и его свойства при размещении его на форме
Есть пользовательский компонент на базе TImage. При размещении его на форме проекта, компонент...

3
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,653
Записей в блоге: 13
24.12.2013, 09:01 2
24 декабря - самое подходящее время для того, чтобы наконец... попросить помощи. Поищи на форуме - примеры ЭС на Лиспе попадались.
0
1 / 1 / 0
Регистрация: 21.04.2010
Сообщений: 50
24.12.2013, 12:48  [ТС] 3
Задание выдали только сегодня, а к субботе нужно сделать. Если бы полгода было бы, я сама разобралась бы. Вот и прошу помочь, так как не знаю, чего и делать то
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,653
Записей в блоге: 13
24.12.2013, 13:11 4
Вот код, который может помочь. Код не мой, (источник - в начале):

Кликните здесь для просмотра всего текста

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
;; [url]http://forum.ru-board.com/topic.cgi?forum=33&topic=9177[/url]
 
(defstruct правило им_ услови_ выводы)
(make-правило
  :им_     'ПРАВИЛО9
  :услови_ '(
              (высота полёта до 50 м)
            )
  :выводы  '(
              (птица Воробей)
            )
)
(setq ПРАВИЛО1
  '(ЕСЛИ размах крыльев до 2.4 м
    ТО птица Орёл)
)
(setq ПРАВИЛО2
  '(ЕСЛИ окраска оперени_ чёрно-бела_
    ТО птица Орёл)
)
(setq ПРАВИЛО3
  '(ЕСЛИ высота полёта до 1500 м
    ТО птица Орёл)
)
(setq ПРАВИЛО4
  '(ЕСЛИ размах крыльев до 1.2 м
    ТО птица Сокол)
)
(setq ПРАВИЛО5
  '(ЕСЛИ окраска оперени_ тёмна_
    ТО птица Сокол)
)
(setq ПРАВИЛО6
  '(ЕСЛИ высота полёта до 2000 м
    ТО птица Сокол)
)
 
(setq ПРАВИЛО7
  '(ЕСЛИ размах крыльев до 0.25 м
    ТО птица Воробей)
)
(setq ПРАВИЛО8
  '(ЕСЛИ окраска оперени_ коричнева_
    ТО птица Воробей)
)
(setq ПРАВИЛО9
  '(ЕСЛИ высота полёта до 50 м
    ТО птица Воробей)
)
;Функци_ дл_ добавлени_ элемента в конец списка
(defun присоедини (x y)  
  (append x (list y))
)
;Анализирует правила и составл_ет из них список
(defun анализируй (правила)
  (mapcar (function анализируй-правило) правила)
)
;Преобразует правило в форме предложени_ в структуру
(defun анализируй-правило (им_)
  (let ((правило (eval им_)))
    (make-правило  
      :им_ им_
      :услови_ (услови_ правило)
      :выводы (выводы правило)
    )
  )
)
;Возвращает услови_ в виде списка
(defun услови_ (предложение)
  (предложение-и (cdr предложение) nil nil)
)
 
;Возвращает выводы в виде списка
(defun выводы (предложение)
  (предложение-и (cdr (member 'то предложение)) nil nil)
)
 
;Выдел_ет предложени_, раздел_емые символом И
(defun предложение-и (предложение часть результат)
  (cond
    (
      (null предложение) ;; условие окончани_  
      (присоедини результат часть)
    )  
    (
      (eq (car предложение) 'то) ;; условие окончани_  
      (присоедини результат часть)
    )
    (
      (eq (car предложение)) ;; новое предложение  
      (предложение-и  
        (cdr предложение)  
        nil
        (присоедини результат часть)
      )
    )
    (
      t ; следующее слово
      (предложение-и  
        (cdr предложение)
        (присоедини часть  (car предложение))
        результат
      )
    )
  )
)
(setq *база-знаний*
  '(ПРАВИЛО1 ПРАВИЛО2 ПРАВИЛО3 ПРАВИЛО4 ПРАВИЛО5
    ПРАВИЛО6 ПРАВИЛО7 ПРАВИЛО8 ПРАВИЛО9)
)
(setq *правила* (анализируй *база-знаний*))
;Провер_ет, применимо ли правило
(defun проверь-правило (правило)
  (подмножество (правило-услови_ правило) *факты*)
)
 
;Провер_ет, _вл_етс_ ли множество подмножеством
(defun подмножество (подмножество множество)
  (equal  
    подмножество
    (intersection подмножество множество)
  )
)
 
(defmacro mypush (v l)
    `(setf ,l (cons ,v ,l))
)
 
 
;Расшир_ет список фактов выводами правила
(defun добавь-выводы (правило)
  (do ((выводы (правило-выводы правило) (cdr выводы)))
    ((null выводы) *факты*)
    (if (member (car выводы) *факты*)
      nil
      (progn
        (format t "Согласно правилу ~S : " (правило-им_ правило))
        (выведи-элементы (car выводы))
        (mypush (car выводы) *факты*)
      )
    )
  )
)
 
;Выводит элементы списка
(defun выведи-элементы (список)
  (dotimes (i (length список))
    (princ (nth i список))
    (princ " ")
  )
  (terpri)
  t
)
(setq *гипотезы*
  '(
    (птица Орёл)
    (птица Сокол)
    (птица Воробей)
  )
)
(setq *факты* nil)
(setq *запросы* nil)
 
;;; Глобальные динамические переменнне
(defvar *гипотезы*)  ; значение определено выше
(defvar *правила*)   ; значение определено выше
(defvar *факты*)     ; значение определено выше
(defvar *запросы*)   ; значение определено выше
 
;;; Главна_ программа Птички
(defun Птички ()  ; Экспертна_ система дл_ распознавани_ птиц
  (setq *факты* nil)
  (setq *запросы* nil)
  (знаток-птиц *гипотезы*)
)
 
;Пытаетс_ проверить какую-нибудь гипотезу
(defun знаток-птиц (гипотезы)  
  (cond
    (
      (null гипотезы)
      "Не могу доказать никакую из известных мне гипотез"
    )
    (
      (докажи (car гипотезы))
      (car гипотезы)   ; результат
    )
    (
      t
      (знаток-птиц (cdr гипотезы)) ; нова_ попытка
    )
  )
)
(defun докажи (гипотеза)
  (let ((прав nil))
    (cond
      ((member гипотеза *факты*) t)            ; ветвь 1
      (
        (setq прав (возможные гипотеза))       ; ветвь 2
        (if (пр_мо гипотеза прав)  
          t
          (рекурсивно гипотеза прав)
        )
      )
      (
        t                                      ; ветвь 3
        (ветка3 гипотеза)
      )
    )
  )
)
 
(defun ветка3 (гипотеза)
  (cond
    ((member гипотеза *запросы*) nil)    
    (
      (and
        (princ "Это правда, что: ")
        (выведи-элементы гипотеза)
        (eq (read) 'Да)
      )
      (setq *факты* (union (list гипотеза) *факты*))  
      t
    )
    (
      t
      (mypush гипотеза *запросы*)
      nil
    )
  )
)
 
(defun возможные (гипотеза)
  (let ((result nil))
    (dotimes (i (length *правила*) result)
      (when (member  
               гипотеза (правило-выводы (nth i *правила*))
               :test (function equal)
               )
         (setq result (append result (list (nth i *правила*))))
      )
    )
  )
)
 
;Провер_ет, можно ли доказать гипотезу непосредственно
;при помощи какого-нибудь правила
(defun пр_мо (гипотеза возможные)
  (cond
    ((null возможные) nil)
    ((null *факты*) nil)
    (
      (проверь-правило (car возможные))
      (добавь-выводы (car возможные))
    )
    (
      t
      (пр_мо гипотеза (cdr возможные))
    )
  )
)
 
;Рекурсивно провер_ет гипотезу
(defun рекурсивно (гипотеза возможные)
  (cond
    ((null возможные) nil)
    (
      (проверь-непр_мо (правило-услови_ (car возможные)))
      (добавь-выводы (car возможные))
    )
    (
      t
      (рекурсивно гипотеза (cdr возможные))
    )
  )
)
 
;Рекурсивно провер_ет все услови_
(defun проверь-непр_мо (услови_)
  (every (function докажи) услови_)
)
0
24.12.2013, 13:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.12.2013, 13:11
Помогаю со студенческими работами здесь

Получить доступ к элементу объекта document по его ID и изменить свойства элемента и его содержимое
Здравствуйте господа, нужен скрипт который будет выводить все свойства объекта, допустим <div>...

Написание программы с использованием файловых переменных. Разработка программы для работы с текстовым файлом
Помогите пожалуйста : С помощью текстового редактора создать текстовый файл file1. Переписать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru