Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Lisp] Определение компонента связности 
:(
    Опции темы
LFC
Дата 25.5.2009, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 18.12.2008

Репутация: нет
Всего: нет



Задание выглядит так: 
Написать программу на языке XLisp, определяющую компоненты связности данного неориентированного графа. Каждая компонента связности - список вершин, следовательно, решение задачи должен быть список списков.
Указание: запрограммируйте предварительно предикат (path X Y), проверяющий, существует ли путь из вершины X в вершину Y.


Помогите разобраться...Опишите пожайлуста построчно программу, что делает в каждом случае функция начиная с 33 строчки



Код

(defun graf(f k)
   (cond ((null f) '(vy ne vveli ni odnoi vershiny))
         ((err1 f) '(vershina ne mozhet byt spiskom))
         ((err2 k) '(oshibka v ukazanii rebra esli net reber vvedite () ))
         ((err3 k f) '(vvedeny nesuschestvuyuschie rebra)) 
         (t (grafdim f k)) )
)
(defun err1(f1)
   (cond ((null f1) NIL)
         ((atom (first f1)) (err1 (rest f1)))
         (t T) )
)
(defun err2(f2)
   (cond ((null f2) NIL)
         ((atom (first f2)) T)
         ((= (length (first f2)) 2) (err2 (rest f2)))
         (t T) )
)
(defun err3(f3 f1)
    (eqdim (remove-duplicates (slit f3)) f1 f1)
)
(defun eqdim(x y m)
    (cond ((null x) NIL)
          ((null y) T)  
          ((eql (first x) (first y)) (eqdim (rest x) m m))
          ((not (eql (first x) (first y))) (eqdim x (rest y) m))
      (t T) )
)
(defun slit(f)
   (if (null f) f 
       (append (first f) (slit (rest f))) )
)
(defun grafdim(s x) (osno s x nil))                    
(defun osno(a b c)                            
    (cond ((null a) c)                            
          ((path a b) (setq m (pap b (first a) (list(first a))))             
                      (osno (remdel m a) b (cons m c)))                
          (t (osno (rest a) b (cons (list(first a)) c)))                
    )
)
(defun remdel(h j)                                                                            
   (if (null h) j                            
       (remdel (rest h) (remove (first h) j)) )                
)
(defun path(x y)                            
    (cond ((eql (first(first y)) (first x)) T)                    
          ((eql (second(first y)) (first x)) T)                    
          (t (if (null y) NIL (path x (rest y)))) )                
)
(defun pap(v r el)                            
    (if (null r) (remove-duplicates el)                    
       (pap (mam v r nil) (first (phun v r nil)) (phun v r el)) )            
)
(defun phun(e x z)                            
    (cond ((eql (first(first e)) x) (phun (rest e) x (cons(second(first e)) z)))    
          ((eql (second(first e)) x) (phun (rest e) x (cons(first(first e)) z)))        
          (t (if (null e) z (phun (rest e) x z)) ))                
)
(defun mam(s f z1)                            
    (cond ((eql (first(first s)) f) (mam (rest s) f z1))
          ((eql (second(first s)) f) (mam (rest s) f z1))
          (t (if (null s) z1 (mam (rest s) f (cons (first s) z1))) ))    
)



Это сообщение отредактировал(а) LFC - 26.5.2009, 06:00
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума LISP
Void
  • Пожалуйста, создавайте темы с содержательными названиями.
  • Lisp — это целое семейство языков. Всегда указывайте в теме используемый диалект (Common Lisp, Scheme и т.д.).
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LISP | Следующая тема »


 




[ Время генерации скрипта: 0.0749 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.