Просмотр полной версии : Язык программирования Лисп
кто нить может помочь с ЛИСПом?!
ужыс то какой. где его проходят то?
УГНТУ....разбираешься в нем?!
это было давно и неправда. а чо надо то?
Например есть два списка
L1 (AB) и L2 (12)
надо сделать функцию чтоб на выходе получалось (А1В2)
OsminogPauli
14-12-2010, 18:21
(DEFUN MERGE (L1 L2)
(COND ((AТОМ L1) L2)
((ATOM L2) L1)
(Т (LET ((L NIL))
(COND ((< (CAR L1) (CAR L2))
(SETQ L L1) (POP L1))
(T (SETQ L L2) (POP L2)))
(DO ((P L (CDR P)))
((OR (ATOM L1) (ATOM L2))
(COND ((ATOM L1) (RPLACD P L2))
(T (RPLACD P L1)))
L)
(COND ((< (CAR L1) (CAR L2))
(RPLACD P L1) (POP L1))
(T (RPLACD P L2) (POP 12)))) ))))
(DEFUN MSORT (X1 N)
(COND ((<= N 1) X1)
(T (DO (X2
(N2 (TRUNCATE N 2))
(K 1 (+ K 1))
(P X1 (CDR P)))
((= К N2)
(SETQ X2 (CDR P))
(RPLACD P NIL)
(SETQ X1 (MSORT X1 K))
(SETQ X2 (MSORT X2 (- N K)))
(MERGE X1 X2))) )))
(DEFUN MERGESORT (L) (MSORT L (LENGTH L)))
хз уже не помню :(
тут многовато друг(((по другому как то
OsminogPauli
15-12-2010, 10:49
(defun lab (x y)
(cond ((null x) y) ((null y) x) ((lab1 x y))))
(defun lab1 (x y)
(when x (cons (car x) (lab1 y (cdr x)))))>(lab '(1 2 3) '(a b c))
(1 a 2 b 3 c)
Может так?
во это вроде верноооо!!!!! спасибо...надеюсь ОНО!!!
Undefined Function Break: (when x (cons (car x) (lab1 y (cdr x))))
OsminogPauli
15-12-2010, 17:44
(defun lab (x y)
(cond ((null x) y) ((null y) x) ((lab1 x y))))
(defun lab1 (x y)
(if x (cons (car x) (lab1 y (cdr x)))))>(lab '(1 2 3) '(a b c))
(1 a 2 b 3 c)
или так
OsminogPauli
15-12-2010, 17:46
(defun lab (x y)
(cond ((null x) y) ((null y) x) ((la x y))))
(defun la (x y)
(cond (x (cons (car x) (la y (cdr x))))))
> (lab '(1 2 3) '(a b c))
(1 A 2 B 3 C)
(lab '(1 2 3) '())
> (1 2 3)
CL-USER> (lab '() '(a b c))
> (A B C)
OsminogPauli
15-12-2010, 17:50
все мозг взорвался...
OsminogPauli
15-12-2010, 17:51
она до сих пор преподает? :eek::D
самому интересно. В той же желтой кофточке? :D
спасибо большое..на днях пойду сдавать скажу результат))а так заработала прога
OsminogPauli
15-12-2010, 18:51
попробуй еще 2 версию)
Гг:D Вот они где ПОшнеги:D
на матизке катается?
OsminogPauli
15-12-2010, 18:52
только бить нас не надо :D
Да ладно, я сам у Буренина диплом писал :rolleyes:
вторая тоже работает))))спасибо)))
не осталось копии диплома?!))
Нее, давно все отформатировано. Годы прошли ужо))
сам писал проги на диплом?!?!или помогали?! учился заочно или очно!?!
Очно, сам, с другом:D. У меня не стока программирование, скока админка)
transmaster
16-12-2010, 09:28
вроде на ПО все проги пишут на диплом...или не ОБЯЗАТЕЛЬНО!?
обязательно)))
я и не говорил, что не писал.
линуксоида зовите он лисп наизусть знает :D
да он вроде сам приходит всегда..а тут нету..значит не шарит
Задача 1.
Определяет принадлежность элемента к заданному списку
Решение:
(defun prinad (el sp)
(cond ((null sp) nil)
((eq el (car sp)) t)
(t (prov el (cdr sp)))))
Пример работы:
> (prinad 2 '(1 2 3 4))
T
Задача 2.
Находит последний четный (нечетный) элемент списка
Решение:
(defun poselch (sp)
(setf sp (reverse sp))
(cond
((null sp) nil)
((= (mod (car sp) 2) 0) (car sp))
(t (poselch (reverse (cdr sp))))))
(defun poselnech (sp)
(setf sp (reverse sp))
(cond
((null sp) nil)
((not(= (mod (car sp) 2) 0)) (car sp))
(t (poselnech (reverse (cdr sp))))))
Пример работы:
> (poselch '(1 2 3 4 5))
4
> (poselnech '(1 2 3 4 5 6))
5
Задача 3.
Удаляет последний элемент списка
Решение:
(defun udalposel (sp)
(cond ((null sp) nil)
((null (cdr sp)) nil)
(t (cons (car sp) (udalposel (cdr sp))))))
Пример работы:
> (udalposel '(1 2 3 4))
(1 2 3)
Задача 4.
Вычисляет число элементов, совпадающих с данным элементом
Решение:
(defun kolelsov (el sp sov)
(cond ((null sp) sov)
((eql el (car sp)) (setf sov (+ sov 1)) (kolelsov el (cdr sp) sov))
(t (kolelsov el (cdr sp) sov))))
Пример работы:
> (kolelsov 2 '(1 2 3 2 4 5 2) 0)
3
Задача 5.
Удаляет первое вхождение заданного элемента из списка
Решение:
(defun udalper (el sp)
(cond
((null sp) nil)
((eql el (car sp)) (cdr sp))
(t (cons (car sp) (udalper el (cdr sp))))))
Пример работы:
> (udalper 3'(1 2 3 4 5 3))
(1 2 4 5 3)
Задача 6.
Удаляет элементы, стоящие на четных (нечетных) позициях
Решение:
(defun chetpoz (sp)
(cond
((null (cdr sp)) sp)
(t (cons (car sp) (chetpoz (cdr (cdr sp)))))))
(defun nechetpoz (sp)
(cond
((null (cdr (cdr sp))) (cdr sp))
(t (cons (cadr sp) (nechetpoz (cdr (cdr sp)))))))
Пример работы:
> (chetpoz '(1 2 3 4 5 6 7))
(1 3 5 7)
> (nechetpoz '(1 2 3 4 5 6 7))
(2 4 6)
Задача 7.
Удаляет все вхождения заданного элемента из списка
Решение:
(defun udalvse (el sp)
(cond
((null sp) nil)
((eql el (car sp)) (udalvse el (cdr sp)))
(t (cons (car sp) (udalvse el (cdr sp))))))
Пример работы:
> (udalvse 3 '(1 2 3 5 3 4 4 8 2 3))
(1 2 5 4 4 8 2)
Задача 8.
Заменяет элементы, совпадающие с заданным на новые
Решение:
(defun zamena (el zam sp)
(cond
((null sp) nil)
((eql el (car sp)) (setf sp (cons zam (cdr sp)))(zamena el zam sp))
(t (cons (car sp) (zamena el zam (cdr sp))))))
Пример работы:
> (zamena 4 8 '(1 2 4 5 3 6 7 4 8 2 4))
(1 2 8 5 3 6 7 8 8 2 8)
Задача 9.
Проверяет список на одноуровневость
Решение:
(defun prov (sp)
(cond
((null sp) t)
((not (atom (car sp))) nil)
(t (prov (cdr sp)))))
Пример работы:
> (prov '(1 2 (3)))
NIL
> (prov '(1 2 3))
T
Задача 10.
Обращает список
Решение:
(defun obrat (sp)
(cond
((null sp) nil)
(t (append (obrat (cdr sp))(cons (car sp) nil)))))
Пример работы:
> (obrat '(1 2 3 4 5))
(5 4 3 2 1)
Задача 11.
Переводит список (a b c) в списки (((с) b) a), (a (b (c))) и (((a) b) c)
Решение:
(defun preob1 (sp)
(cond
((null (cdr sp)) sp)
(t (list (preob1 (cdr sp)) (car sp)))))
(defun preob2 (sp)
(cond
((null (cdr sp)) sp)
(t (list (car sp)(preob2 (cdr sp))))))
(defun preob3 (sp)
(setf sp (reverse sp))
(cond
((null (cdr sp)) sp)
(t (list (preob3 (reverse(cdr sp)))(car sp)))))
Пример работы:
> (preob1 '(a b c))
(((C) B) A)
> (preob2 '(a b c))
(A (B (C)))
> (preob3 '(a b c))
(((A) B) C)
Задача 12.
Соединяет списки (a b c…) и (1 2 3…) в список (a 1 b 2 c 3 …)
Решение:
(defun preob4 (sp1 sp2)
(cond
((null sp1) nil)
((null sp2) nil)
(t (append (list (car sp1) (car sp2)) (preob4 (cdr sp1) (cdr sp2))))))
Пример работы:
> (preob4 '(a b c) '(1 2 3)))
(A 1 B 2 C 3)
Задача 13.
Объединяет два списка
Решение:
(defun obeddva (sp1 sp2)
(cond
((null sp1) sp2)
((null sp2) nil)
(t (append (list (car sp1)) (obeddva (cdr sp1) sp2)))))
Пример работы:
> (obeddva '(1 2 3 4) '(a d f))
(1 2 3 4 A D F)
в прошлом году изучали лисп... вот че нарыл авось автору пригодится))
прикольный язык, мозг поломать отлично подходит)))
блин...не правильно...надо одной функцией это сделать(((
(defun L (l1 l2)
( cond ((null l1) l2)
((null l2) l1)
(t
(cons (list (car l1) (car l2)) (L (cdr l1) (cdr l2)) )
)
)
)
(L '(a b) '(1 2))
(A 1) (B 2)
поучается...а надо чтоб получалось (А 1 В 2)....как доделать а?!?