Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Lisp
Перезагрузить страницу Помогите с лабами, пожалуйста
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Fizigr Fizigr вне форума
Новичок
 
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.01.2012
Exclamation Помогите с лабами, пожалуйста - 27.01.2012, 18:34

Доброе время суток!

Есть 2 лабы, требующие решения!
Помогите, пожалуйста!

1. Заданы 3 списка. Сформировать из них новый список, элементы которого это - элементы каждого исходного, не повторяющегося в двух других.

P. S. Я так понял, если список повторяется в каком-то из остальных 2-х, то его элементы в результирующий не нужно включать.

2. Создать программу "Переводчик", которая для заданного списка английских слов произвольного уровня вложенности будет формировать список соответствующих русских слов. Список результата не должен содержать вложений. Перевод осуществляется на основе заранее сформированного словаря (не менее 15 слов).

С Этой у меня вообще ассоциаций нет ( Не знаю абсолютно Лисп. пару дней назад первый раз столкнулся. пытаюсь вникнуть.

Помогите, очень надо.
Ответить с цитированием
  (#2 (permalink)) Старый
_sg _sg вне форума
Member
 
Аватар для _sg
 
Сообщений: 522
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 38 сообщениях
Регистрация: 23.01.2007
По умолчанию 27.01.2012, 20:49

lisp Код:
(defun unique-elms (a b c)
  (set-exclusive-or (set-exclusive-or a b) c))

> (unique-elms '(1 2 3) '(3 4 5) '(5 6 7))
(1 2 4 6 7)
Ответить с цитированием
  (#3 (permalink)) Старый
_sg _sg вне форума
Member
 
Аватар для _sg
 
Сообщений: 522
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 38 сообщениях
Регистрация: 23.01.2007
По умолчанию 27.01.2012, 20:53

lisp Код:
(defun flat (w &optional acc)
  (cond ((null w) acc)
        ((atom w) (cons w acc))
        ((flat (car w) (flat (cdr w) acc)))))

(defun late (a w)
  (cond ((null w) nil)
        ((equal a (caar w)) (cons (cadar w) (late a (cdr w))))
        ((late a (cdr w)))))

(defun tran (w v)
  (cond ((null w) nil)
        ((nconc (late (car w) v) (tran (cdr w) v)))))

(defun translate (w v)
  (tran (flat w) v))

> (translate '(cakes (ale)) '((cakes pyrogy) (ale pyvo)))
(PYROGY PYVO)
Ответить с цитированием
  (#4 (permalink)) Старый
_sg _sg вне форума
Member
 
Аватар для _sg
 
Сообщений: 522
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 38 сообщениях
Регистрация: 23.01.2007
По умолчанию 27.01.2012, 21:12

lisp Код:
(defun unique (v vv vvv)
  (cond ((null v) nil)
        ((or (member (car v) vv) (member (car v) vvv)) (unique (cdr v) vv vvv))
        ((cons (car v) (unique (cdr v) vv vvv)))))

(defun unique-elms (a b c)
  (nconc (unique a b c) (unique b c a) (unique c a b)))

> (unique-elms '(1 2 3) '(3 4 5) '(5 6 7))
(1 2 4 6 7)
Ответить с цитированием
  (#5 (permalink)) Старый
_sg _sg вне форума
Member
 
Аватар для _sg
 
Сообщений: 522
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 38 сообщениях
Регистрация: 23.01.2007
По умолчанию 27.01.2012, 21:17

lisp Код:
(defun unique-elms (a b c)
  (reduce #'set-exclusive-or `(,a ,b ,c)))

> (unique-elms '(1 2 3) '(3 4 5) '(5 6 7))
(1 2 4 6 7)
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
_sg _sg вне форума
Member
 
Аватар для _sg
 
Сообщений: 522
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 38 сообщениях
Регистрация: 23.01.2007
По умолчанию 27.01.2012, 21:27

lisp Код:
(defun unique-elms (&rest w)
  (reduce #'set-exclusive-or w))

> (unique-elms '(1 2 3) '(3 4 5) '(5 6 7))
(1 2 4 6 7)
Ответить с цитированием
  (#7 (permalink)) Старый
Fizigr Fizigr вне форума
Новичок
 
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.01.2012
По умолчанию 28.01.2012, 11:45

_sg, спасибо! Вот сейчас тестирую 1 лабу. По вашему получается все, а если добавить списки в программу, то выдает только уникализированный 1-й список. Не подскажите в чем дело?

lisp Код:
(setq lst1 '(1 2 3 4))
(setq lst2 '(6 3 8))
(setq lst3 '(9 2 1))

(defun unique (v vv vvv)
  (cond ((null v) nil)
        ((or (member (car v) vv) (member (car v) vvv)) (unique (cdr v) vv vvv))
        ((cons (car v) (unique (cdr v) vv vvv)))
  )
)

(defun unique-elms (a b c)
  (nconc (unique a b c) (unique b c a) (unique c a b))
)

(unique-elms lst1 lst2 lst2)
(rds)
Ответить с цитированием
  (#8 (permalink)) Старый
Fizigr Fizigr вне форума
Новичок
 
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.01.2012
По умолчанию 28.01.2012, 11:58

и по словарю таже проблема. Выводит только перевод первого слова.
Что я не так делаю?

lisp Код:
(setq slovar '((cakes pyrogy) (ale pivo) (phone telefon) (child rebenok) (day den) (apple yabloko) (cat kot) (dog sobaka) (full polniy)))

(defun flat (w &optional acc)
  (cond ((null w) acc)
        ((atom w) (cons w acc))
        ((flat (car w) (flat (cdr w) acc)))))

(defun late (a w)
  (cond ((null w) nil)
        ((equal a (caar w)) (cons (cadar w) (late a (cdr w))))
        ((late a (cdr w)))))

(defun tran (w v)
  (cond ((null w) nil)
        ((nconc (late (car w) v) (tran (cdr w) v)))))

(defun translate (w v)
  (tran (flat w) v))

(translate '(cakes (phone) (day)) slovar)
(rds)
Ответить с цитированием
  (#9 (permalink)) Старый
_sg _sg вне форума
Member
 
Аватар для _sg
 
Сообщений: 522
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 38 сообщениях
Регистрация: 23.01.2007
По умолчанию 28.01.2012, 12:34

lisp Код:
(defun unique (v vv vvv)
  (cond ((null v) nil)
        ((or (member (car v) vv) (member (car v) vvv)) (unique (cdr v) vv vvv))
        ((cons (car v) (unique (cdr v) vv vvv)))))

(defun unique-elms (a b c)
  (nconc (unique a b c) (unique b c a) (unique c a b)))

> (unique-elms '(1 2 3 4) '(6 3 8) '(9 2 1))
(4 6 8 9)
Ответить с цитированием
  (#10 (permalink)) Старый
_sg _sg вне форума
Member
 
Аватар для _sg
 
Сообщений: 522
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 38 сообщениях
Регистрация: 23.01.2007
По умолчанию 28.01.2012, 12:39

lisp Код:
(defun flat (w &optional acc)
  (cond ((null w) acc)
        ((atom w) (cons w acc))
        ((flat (car w) (flat (cdr w) acc)))))

(defun late (a w)
  (cond ((null w) nil)
        ((equal a (caar w)) (cons (cadar w) (late a (cdr w))))
        ((late a (cdr w)))))

(defun tran (w v)
  (cond ((null w) nil)
        ((nconc (late (car w) v) (tran (cdr w) v)))))

(defun translate (w v)
  (tran (flat w) v))

> (translate '(cakes (phone) (day)) '((cakes pyrogy) (ale pivo) (phone telefon) (child rebenok) (day den) (apple yabloko) (cat kot) (dog sobaka) (full polniy)))
(PYROGY TELEFON DEN)
Ответить с цитированием
  (#11 (permalink)) Старый
Fizigr Fizigr вне форума
Новичок
 
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.01.2012
По умолчанию 28.01.2012, 12:44

_sg, спасибо ещё раз, я так как вы говорите проверял - тоже работает, но вот нужно, чтобы списки были уже в программе и при запуске производился перевод. А потом уже если пользователь захотел ещё что-то перевести - написал бы (translate '(dog (cat)) slovar) и выдалось бы (sobka kot). Почему в таком случае переводится только 1 элемент?
Ответить с цитированием
  (#12 (permalink)) Старый
_sg _sg вне форума
Member
 
Аватар для _sg
 
Сообщений: 522
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 38 сообщениях
Регистрация: 23.01.2007
По умолчанию 28.01.2012, 12:53

lisp Код:
(defparameter slovar '((cakes pyrogy) (ale pivo) (phone telefon) (child rebenok) (day den) (apple yabloko) (cat kot) (dog sobaka) (full polniy)))

> (translate '(cakes (phone) (day)) slovar)
(PYROGY TELEFON DEN)
Ответить с цитированием
Ads
  (#13 (permalink)) Старый
Fizigr Fizigr вне форума
Новичок
 
Сообщений: 9
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.01.2012
По умолчанию 28.01.2012, 13:07

defparameter не работает, выдает ошибку (
с первой лабой все ок, разобрался
А словарь даже в вашем варианте переводит только 1-е слово (
Ответить с цитированием
  (#14 (permalink)) Старый
_sg _sg вне форума
Member
 
Аватар для _sg
 
Сообщений: 522
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 38 сообщениях
Регистрация: 23.01.2007
По умолчанию 28.01.2012, 13:17

lisp Код:
(defparameter lst1 '(1 2 3 4))
(defparameter lst2 '(6 3 8))
(defparameter lst3 '(9 2 1))

> (unique-elms lst1 lst2 lst3)
(4 6 8 9)
Ответить с цитированием
  (#15 (permalink)) Старый
_sg _sg вне форума
Member
 
Аватар для _sg
 
Сообщений: 522
Сказал(а) спасибо: 5
Поблагодарили 42 раз(а) в 38 сообщениях
Регистрация: 23.01.2007
По умолчанию 28.01.2012, 13:22

lisp Код:
(defparameter slovar '((cakes pyrogy) (ale pivo) (phone telefon) (child rebenok) (day den) (apple yabloko) (cat kot) (dog sobaka) (full polniy)))

(defun flat (w &optional acc)
  (cond ((null w) acc)
        ((atom w) (cons w acc))
        ((flat (car w) (flat (cdr w) acc)))))

(defun late (a w)
  (cond ((null w) nil)
        ((equal a (caar w)) (cons (cadar w) (late a (cdr w))))
        ((late a (cdr w)))))

(defun tran (w v)
  (cond ((null w) nil)
        ((nconc (late (car w) v) (tran (cdr w) v)))))

(defun translate (w v)
  (tran (flat w) v))

> (translate '((apple) (phone) (day)) slovar)
(YABLOKO TELEFON DEN)
Ответить с цитированием
Ответ

Метки
объединение списков , программа переводчик

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста Rock_am_ring Видеокарты 5 30.01.2012 21:38
Люди добрые, помогите с лабами, пожалуйста! PashaKol Lisp 15 30.01.2012 21:04
Помогите пожалуйста Denik DHTML, JavaScript, VBScript 0 28.09.2011 18:44
Помогите пожалуйста! Cote_D_Or Любые вопросы от новичков 17 20.06.2011 13:17
Помогите пожалуйста!! lsvsxb Системный блок 4 26.01.2011 14:31
Помогите пожалуйста organatik Видеокарты 5 25.01.2011 21:51
помогите с лабами катюшечка Pascal 1 28.09.2010 22:47
Помогите пожалуйста!!!!! Ринат 91 Pascal 1 27.05.2010 03:51
Помогите пожалуйста!!! bulka-12 Подбор комплектующих 15 15.01.2009 17:43
Помогите пожалуйста pentor Pascal 3 16.04.2008 12:18
помогите пожалуйста Pretty Visual Basic 0 24.05.2005 20:09
Помогите пожалуйста! Oksana22 Prolog 0 09.05.2005 19:04



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов