> 1 <

Автор Сообщение

deniscomp

Members


Статус

13 сообщений

Где: Ukraine
Род занятий: дистрибьютор
Возраст: 34

#1072   2010-01-06 22:22 GMT+3 часа(ов)      
В общем ситуация такая, моя девушка выбрала в институте специальность не девичью- программирование =- и там ей уже на пятом курсе дали этот лисп изучать. Который она благополучно изучала, но так и не вьехала в тему... И дали практички выполнять кучу заданий и хрен она их выполнит до сессии , мне кажется... честно говоря -я и сам лисп никогда не открывал, и как его программировать не знаю, обучаться по моему за месяц не обучусь (знаю только как "приветмир" на паскале написать, да и то, ужеи не помню когда последний раз программировал...) Поэтому, может кому то азарт проснентся, или ещё что нить , в общем с миру по нитке, кто что может решить решите плиз... Я гляжу тут сидят умные люди, вроде бы такие задачи как семечки..
Напишу все задачи, что в практичке ,а там буду рад любой решенной ... (вообще то для оценки надо все решить) Но хоть что-то ... Спасибо заранее:

1. Создайте функции и предикаты.
1. Функция LENGTH – возвращает в качестве зна-чения длину списка
2. Функция DESTLEV2 – убирает уровни в списке. Пример: исходный список – (((a) b) c), результи-рующий список – (a b c)
3. Функция APPEND – соединяет два списка в один новый список
4. Функция REMSEC – удаляет из списка каждый второй элемент
5. Функция REMOVE – удаляет из списка все сов-падающие с данным атомом элементы и возвраща-ет в качестве значения список из всех оставшихся элементов
6. Функция DEVPAIR – разбивает список на пары. Пример: исходный список – (a b c d ...), результи-рующий список – ((a b)(c d)...)
7. Функция REMOVEF – удаляет из списка первые вхождения данного элемента
8. Функция MIX – чередует элементы двух спи-сков-аргументов и образует новый список. Пример: исходные списки – (a b ...) и (1 2 ...), результирую-щий список – (a 1 b 2 ...)
9. Функция DEVLEV2 – разбивает список на уров-ни. Пример: исходный список – (a b c), результи-рующий список – (((a) b) c)
10. Функция SUBSTITUE – заменяет все вхождения данного элемента в списке на новый элемент
11. Функция FLATTEN – устраняет в произвольном S-выражении все внутренние скобки, а в точечных выражениях – и точки, превращая его в список атомов. Количество и относительный порядок ато-мов в выражении сохраняются
12. Функция REVL – обращает список и разбивает его на уровни. Пример: исходный список – (a b c), результирующий список – (((c) b) a)
13. Функция ASSOC – вырабатывает в качестве зна-чения первую по порядку пару из заданного ассо-циативного списка, у которой первый элемент сов-падает с заданным выражением. Если такой пары нет, то вырабатывается значение NIL
14. Функция RANK – упорядочивает список, задан-ный в качестве ее первого аргумента, переставляя его элементы в той последовательности, в какой они встречаются в списке, являющемся значением второго аргумента.
15. Функция POSSESSING – образует список из всех элементов данного списка, обладающих за-данным свойством. Список задается в виде значения аргумента, соответствующего связанной переменной L, свойство характеризуется предикатом, наименование или определяющее выражение которого дано в качестве значения аргумента, соответствующего связанной (функциональной) переменной Р.
16. Функция SETOF – для каждого повторяющегося элемента исключает из списка все вхождения, кро-ме одного.
17. Функция DIFLIST – вычисляет разность мно-жеств X\Y. Иначе говоря, она исключает из списка, заданного в качестве значения первого аргумента функции все элементы, встречающиеся в списке, представленном значением второго аргумента.
18. Функция PAIR – объединяет элементы двух за-данных списков в ассоциативный список, выраба-тываемый в качестве значения функции. Функция не определена, если второй из заданных списков короче первого
19. Предикат FORODD – принимает значение Т, ес-ли число элементов списка L, на которых функция P принимает значение «истина», нечетно. (Значением первого аргумента должен быть некоторый список L, а второго (функционального) аргумента – наименование или определяющее выражение функции Р.)
20. Предикат ATOMLIST – проверяет, является ли его аргумент списком (возможно, пустым), состав-ленным лишь из атомов


2. Создайте интерпретатор языка Лисп с поддержкой функций
quote, cond, car, cdr, atom, equal, lambda, plusp, minusp, consp, endp, integerp, null, listp, numberp, symbolp, zerop, nth, length, append, reverse, last, и минимальную систему компьютерной алгебры с поддержкой операций
сложения, вычи-тания, умножения, деления и дифференцирования

(тоже на лиспе -эдакий интерпретатор языка на языке - в инсте ей дали заготовкутуда ещё вписать эти все функции надо )

файл lisplisp.lsp

 
(defun eval1 (форма &optional (св_зи nil))
(cond
((atom форма) ; форма атомарна_
(cond
((eq форма 't1) 't1)
((eq форма 'nil1) 'nil1)
((numberp форма) форма)
((cadr (assoc форма св_зи)))
(t (format t "~%У атома нет св_зи: ~S" форма))
);!!
);!!
;; голова формы - атом
((atom (car форма))
(cond
( (eq (car форма) 'quote1) (cadr форма) )
( (eq (car форма) 'cond1) (eval-cond (cdr форма) св_зи) )
;; вызов функции
( (get (car форма) 'fn)
(apply1
(get (car форма) 'fn)
(eval-список (cdr форма) св_зи)
св_зи
)
)
;; встроенна_ функци_
(t (apply1
(car форма)
(eval-список (cdr форма) св_зи)
св_зи
)
)
)
)
;; LAMBDA1-предложение
(t (apply1
(car форма)
(eval-список (cdr форма) св_зи)
св_зи
)
)
)
)
 
 
(defun eval-cond (ветви контекст)
(cond
( (null ветви) 'nil1 )
(
(not (eq (eval1 (caar ветви) контекст) 'nil1))
(eval1 (cadar ветви) контекст)
)
(t (eval-cond (cdr ветви) контекст))
)
)
 
 
(defun apply1 (функци_ аргументы св_зи)
(cond
(
(atom функци_) ; базовые функции
(cond
(
(eq функци_ 'car1)
(cond
((eq (car аргументы) 'nil1) 'nil1)
;; Голова NIL1 - это NIL1
(t (caar аргументы))
)
)
(
(eq функци_ 'cdr1)
(cond
((eq (car аргументы) 'nil1) 'nil1)
;; Хвост NIL1 - это NIL1
((null (cdar аргументы)) 'nil1)
(t (cdar аргументы))
)
)
(
(eq функци_ 'cons1)
(cond
(
(eq (cadr аргументы) 'nil1)
(list (car аргументы))
)
(t (cons (car аргументы) (cadr аргументы)))
)
)
(
(eq функци_ 'atom1)
(cond
( (atom (car аргументы)) 't1)
(t 'nil1)
)
)
(
(eq функци_ 'equal1)
(cond
( (equal (car аргументы) (cadr аргументы)) 't1)
(t 'nil1)
)
)
(t (format t "~%Неизвестна_ функци_: ~S" функци_))
)
)
(
(eq (car функци_) 'lambda1)
;; л_мбда-вызов
(eval1 (caddr функци_)
(создай-св_зи (cadr функци_) аргументы св_зи)
)
)
(t (format t "~%Это не л_мбда-вызов: ~S" функци_))
)
)
 
;;; Окружение новыми парами им_-значение
(defun создай-св_зи (формальные фактические окружение)
(cond
((null формальные) окружение)
(t (acons
(car формальные)
(car фактические)
(создай-св_зи
(cdr формальные)
(cdr фактические)
окружение
)
)
)
)
)
 
 
(defun acons (x y a)
(cons (cons x (cons y nil)) a))
 
 
(defun eval-список (невычисленные св_зи)
(cond
((null невычисленные) nil)
(t (cons
(eval1 (car невычисленные) св_зи)
(eval-список (cdr невычисленные) св_зи)
)
)
)
)
 
(defun pprint1 (l &optional (отступ 0))
(cond
((atom l) ; Вывод атома
(установи отступ)
(prin1 l)
)
((< (length l) 3) ; Короткий список просто выводится
(установи отступ)
(prin1 l)
)
(t
(terpri) ; Длинный список преобразуется
(установи отступ)
(princ "(")
(prin1 (car l))
(pp-хвост (cdr l) отступ)
)
)
)
 
;;; Хвост выводится с отступом
(defun pp-хвост (l отступ)
(cond
((null l) (princ ")") t)
(t
(terpri)
(установи отступ)
(pprint1 (car l) (+ отступ 3))
(pp-хвост (cdr l) отступ)
)
)
)
 
;; выводит n пробелов
(defun установи (n)
(cond
((= n 0) t)
(t
(princ " ")
(установи (- n 1))
)
)
)
 
 
(defun интерпретатор nil
(progn
(princ "Наш Лисп:")
(terpri)
(terpri)
(princ "<- ")
(do ((выражение (read) (read)))
((eq выражение 'конец) 'до-свидани_)
(princ "-> ")
(pprint1 (eval1 выражение) 3)
(terpri)
(princ "<- ")
)
)
)
 


Это для второй части типа...

отредактировал(а) deniscomp: 2010-01-07 01:07 GMT+3 часа(ов)

antares0

Members


Статус

185 сообщений

Где: Russia
Род занятий:
Возраст:

#1073   2010-01-06 22:43 GMT+3 часа(ов)      
Такую груду или просить у студентов ил на progz плакаться. Или дергать из SICp-решений, но явно не твой путь.
Вобще не фиг жадничать, деньги помогают в многих вопросах.

deniscomp

Members


Статус

13 сообщений

Где: Ukraine
Род занятий: дистрибьютор
Возраст: 34

#1074   2010-01-06 22:52 GMT+3 часа(ов)      
Цитата
antares0 :
Такую груду или просить у студентов ил на progz плакаться. Или дергать из SICp-решений, но явно не твой путь.
Вобще не фиг жадничать, деньги помогают в многих вопросах.



А никто и не жадничает ... Если есть WEbmoney - могу оплатить работу ... Цена вопроса 200 грн. устроит? (1000 руб где то ) ...

ЗЫ просто препод уникальный -денег не берет - а злой как черт...

ЗЫ2 частичномогу авансом дать...

antares0

Members


Статус

185 сообщений

Где: Russia
Род занятий:
Возраст:

#1075   2010-01-06 23:06 GMT+3 часа(ов)      
Я б ориентировчно 3 просил, если бы просил. Опять же тут фокус в том что, нормальные люди такую муть не пишут она уже есть встроеная и чисто рабочий код преподу не понравиться.
Я ж не зря про progz и студентов. Чисто студенческий лисп он к нормальному имеет отдаленное отншение. А те студенты которые могут это решить сюда наверноое и не особо ходят, решат и забудут. Опять же если подруга не в теме, то лучше брать содранные с предыдущего курса, впрочем как знаешь.

deniscomp

Members


Статус

13 сообщений

Где: Ukraine
Род занятий: дистрибьютор
Возраст: 34

#1077   2010-01-06 23:19 GMT+3 часа(ов)      
Печаль в том , что те студенты, которые решали эти задачи -уже отучились - лисп у них на 5-ом курсе то...
Я вот нашел какие то Cisp решения- тут они могут быть ?

http://sicp.sergeykhenkin.com/sicp-exercise-solutions/

ЗЫ наверно для интерпретатора подойдет и рабочий код.... Где его выковырять, не подскажешь? ....

Я тоже как бы не в теме )))

VH

Members


Статус

289 сообщений

Где: ---
Род занятий:
Возраст:

#1078   2010-01-06 23:19 GMT+3 часа(ов)      
Хювёнен-Сеппянен "Мир Лиспа" т.1
1.1. стр.364:
(defun LENGTH (L)
(cond
((null L) 0)
(T (1+ (LENGTH (cdr L))))))

1.2. стр.371:
(defun DESTLEV2 (L)
(if (atom (car L)) L
(append (DESTLEV2 (car L)) (cdr L))))

1.3 стр.214:
(defun APPEND (X Y)
(cond
((null X) Y)
(T (cons (car X) (APPEND (cdr X) Y)))))

1.4. стр.371:
(defun REMSEC (L)
(cond
((null L) nil)
((null (cdr L)) L)
(T (cons (car L) (REMSEC (cddr L))))))

1.5. стр.217:
(defun REMOVE (A L)
(cond
((null L) nil)
((eql A (car L)) (REMOVE A (cdr L)))
(T (cons (car L) (REMOVE A (cdr L))))))

to be continued...

deniscomp

Members


Статус

13 сообщений

Где: Ukraine
Род занятий: дистрибьютор
Возраст: 34

#1079   2010-01-06 23:41 GMT+3 часа(ов)      
VH спасибо большое!!! Хоть что-то есть!!..
А есть эта книга в електронном варианте?? Может сам там найду хоть что-нибудь ))) Что бы людям голову не забивать)))
Ещё раз спасибо ...

VH

Members


Статус

289 сообщений

Где: ---
Род занятий:
Возраст:

#1080   2010-01-06 23:41 GMT+3 часа(ов)      
Хювёнен-Сеппянен "Мир Лиспа" т.1
1.6. стр.371:
(defun DEVPAIR (L)
(cond
((null L) nil)
((null (cdr L)) nil)
(T (cons (list (car L) (cadr L)) (DEVPAIR (cddr L))))))

1.7. стр.369-370:
(defun REMOVEF (A L)
(cond
((null L) nil)
((equal (car L) A) (cdr L))
(T (cons (car L) (REMOVEF A (cdr L))))))

1.8. стр.371-372:
(defun MIX (X Y)
(cond
((null X) Y)
(T (cons (car X) (MIX Y (cdr X))))))

1.9. стр.371:
(defun DEVLEV2 (L)
(LAYER L (list (car L))))
(defun LAYER (L Result)
(cond
((null L) Result)
((null (cdr L)) (list Result (car L))) ; в оригинале ((null (cdr L)) L) что НЕВЕРНО!
(T (LAYER (cddr L) (list Result (cadr L)))))) ; в оригинале (T (DEVLEV2 (cddr L) ... что НЕВЕРНО!

1.10. стр.218:
(defun SUBSTITUTE (New Old L)
(cond
((null L) nil)
((eql Old (car L)) (cons New (SUBSTITUTE New Old (cdr L))))
(T (cons (car L) (SUBSTITUTE New Old (cdr L))))))

to be continued...

antares0

Members


Статус

185 сообщений

Где: Russia
Род занятий:
Возраст:

#1081   2010-01-06 23:45 GMT+3 часа(ов)      
Рабочий написать наверное. Для примера посмотреть в http://pcl.lisper.ru главу про LOOP она разом закроет первую часть но преподу не понравиться.
А книжка здесь в ссылках , да и в гугде не редкость.

deniscomp

Members


Статус

13 сообщений

Где: Ukraine
Род занятий: дистрибьютор
Возраст: 34

#1082   2010-01-06 23:50 GMT+3 часа(ов)      
Цитата
antares0 :
Рабочий написать наверное. Для примера посмотреть в http://pcl.lisper.ru главу про LOOP она разом закроет первую часть но преподу не понравиться.
А книжка здесь в ссылках , да и в гугде не редкость.


Ага. Книгу уже скачал, сразу не увидел раздел литературы...
Ссылка не рабочая , увы...

deniscomp

Members


Статус

13 сообщений

Где: Ukraine
Род занятий: дистрибьютор
Возраст: 34

#1083   2010-01-07 00:06 GMT+3 часа(ов)      
ради интереса,
1.12.

(defun REVL (L)

(LAYER (reverse L) (list (car L))))

(defun LAYER (L Result)

(cond

((null L) Result)

((null (cdr L)) (list Result (car L)))

(T (LAYER (cddr L) (list Result (cadr L))))))

правильно написал ? Вроде бы его толшько развернуть надо было с помощью reverse - а так 12 и 9 задания похожи... Хотя с моим "паскалевым" мышлением хз ))) знаю четко только uses, var, begin и т.п. )))

VH

Members


Статус

289 сообщений

Где: ---
Род занятий:
Возраст:

#1084   2010-01-07 00:06 GMT+3 часа(ов)      
1.12. стр.370:
(defun REVL (L)
(cond
((null L) nil)
((null (cdr L)) L)
(T (list (REVL (cdr L)) (car L)))))

1.13. стр.333:
(defun ASSOC (A L) ; в тексте предупреждение - «...можно было бы (упрощенно) определить...»
(cond
((null L) nil)
((eql (caar L) A) (car L))
(T (ASSOC A (cdr L)))))

1.16. стр.373:
(defun SETOF (L)
(cond
((null L) nil)
((member (car L) (cdr L)) (SETOF (cdr L)))
(T (cons (car L) (SETOF (cdr L))))))

1.17. стр.375:
(defun DIFLIST (X Y)
(cond
((null X) nil)
((member (car X) Y) (DIFLIST (cdr X) Y))
(T (cons (car X) (DIFLIST (cdr X) Y)))))

to be concluded...?

---

отредактировал(а) VH: 2010-01-07 00:19 GMT+3 часа(ов)

deniscomp

Members


Статус

13 сообщений

Где: Ukraine
Род занятий: дистрибьютор
Возраст: 34

#1085   2010-01-07 00:13 GMT+3 часа(ов)      
Мде. Очевидно ,до лиспа мне шагать и шагать ))) VH, спасибо ещё раз , что помог . Осталось уже немного , может счто-то ещё найду в книге ,хз Может ещё кто-то подойдет что-нить напишет ,буду заглядывать...

VH
to be concluded?


Можно и continued ... )))

20 в книге нашел - atomlist
(defun atomlist(sp)
(cond ((null sp) t)
((atom sp) nil)
((atom (car sp))
(atomlist(cdr sp)))
(t nil)))
осталось 11 , 14, 15 , 18 , 19. И 2 часть с интерпретатором ...

отредактировал(а) deniscomp: 2010-01-07 00:32 GMT+3 часа(ов)

VH

Members


Статус

289 сообщений

Где: ---
Род занятий:
Возраст:

#1087   2010-01-07 01:24 GMT+3 часа(ов)      
1.18.
(defun PAIR (Key Datum)
(cond
((null Key) nil)
((null Datum) nil)
((null (cdr Key)) (cons (cons (car Key) (car Datum)) nil))
(T
((lambda (result)
(if result
(cons (cons (car Key) (car Datum)) result)))
(PAIR (cdr Key) (cdr Datum))))))

Позвольте прокомментировать фразу из задания «...Функция не определена, если второй из заданных списков короче первого...» - в LISPе вызов функции всегда возвращает значение, так что будем считать, что препод хотел, чтобы в данном случае функция возвращала NIL.

VH

Members


Статус

289 сообщений

Где: ---
Род занятий:
Возраст:

#1088   2010-01-07 01:43 GMT+3 часа(ов)      
1.19.
(defun FORODD (L P &optional (result nil))
(cond
((null L) result)
((funcall P (car L)) (FORODD (cdr L) P (not result)))
(T (FORODD (cdr L) P result))))

отредактировал(а) VH: 2010-01-07 02:01 GMT+3 часа(ов)

deniscomp

Members


Статус

13 сообщений

Где: Ukraine
Род занятий: дистрибьютор
Возраст: 34

#1090   2010-01-07 02:41 GMT+3 часа(ов)      
А такой мааленький вопросик, как работает функция forodd, можете пример привести? А то у меня в xlispe она гненерируется нормально, но что я туда не подставлю, она выдает бедфункцию...

VH

Members


Статус

289 сообщений

Где: ---
Род занятий:
Возраст:

#1091   2010-01-07 03:02 GMT+3 часа(ов)      
(FORODD '(1 2 3 4 5) 'oddp) возвращает T,
так как количество нечетных элементов списка (для которых (oddp число) возвращает T) нечетно
(FORODD '(1 2 3 4 5 7) 'oddp) возвращает NIL,
так как количество нечетных элементов списка четно

VH

Members


Статус

289 сообщений

Где: ---
Род занятий:
Возраст:

#1092   2010-01-07 03:11 GMT+3 часа(ов)      
1.15.
(defun POSSESSING (L P)
(if L
((lambda (elem result)
(if (funcall P elem)
(cons elem result)
result))
(car L)
(POSSESSING (cdr L) P))))

VH

Members


Статус

289 сообщений

Где: ---
Род занятий:
Возраст:

#1093   2010-01-07 03:14 GMT+3 часа(ов)      
Всё, что представлено Вами по заданию 2 - изложено в разделе 4.1 тома 2 "Мир Лиспа" Хювёнена-Сеппянена.

deniscomp

Members


Статус

13 сообщений

Где: Ukraine
Род занятий: дистрибьютор
Возраст: 34

#1095   2010-01-08 02:19 GMT+3 часа(ов)      
Такой вопросик - эта реализация подойдет к этому заданию? :

11. Функция FLATTEN – устраняет в произвольном S-выражении все внутренние скобки, а в точечных выражениях – и точки, превращая его в список атомов. Количество и относительный порядок ато-мов в выражении сохраняются

(defun in-one-level (x)
 
(cond
 
((null x) nil)
 
((atom x) (cons x nil))
 
(t (append~ (in-one-level (car x))
 
(in-one-level (cdr x))))
 
)
 
)
 
(defun append~ (x y)
 
(cond
 
((null x) y)
 
((atom x) (cons x y))
 
(t (cons (car x) (append~ (cdr x) y)))
 
)
 
)

VH

Members


Статус

289 сообщений

Где: ---
Род занятий:
Возраст:

#1121   2010-01-11 14:18 GMT+3 часа(ов)      
Вполне подойдет <и без «специального» append~>:
1.11.
(defun FLATTEN (X)
(cond
((null X) nil)
((atom X) (cons X nil))
(T
(append
(FLATTEN (car X))
(FLATTEN (cdr X))))))

аня

Members


Статус

1 сообщений

Где: Russia
Род занятий:
Возраст:

#1130   2010-01-13 01:12 GMT+3 часа(ов)      
Помогите пожалуйста решить задачку!!!
Определить функцию НОД(XY), позволяющую найти наибольший общий делитель чисел X и Y.

Fallen_s4e

Members


Статус

114 сообщений
http://lisper.ru
Где: Zimbabwe lisper.ru
Род занятий: fallen_s4e
Возраст: 8

#1131   2010-01-13 02:08 GMT+3 часа(ов)      
Спасибо хоть не насрала новой темой. Поэтому:
(defun gcd1 (x y)
(cond ((> y x) (gcd1 y x))
((zerop y) x)
(t (gcd1 y (mod x y)))))

отредактировал(а) Fallen_s4e: 2010-01-13 11:34 GMT+3 часа(ов)

VH

Members


Статус

289 сообщений

Где: ---
Род занятий:
Возраст:

#1134   2010-01-13 15:43 GMT+3 часа(ов)      
Для положительных чисел:
(defun GCD (A B)
(cond
((zerop A) nil)
((zerop B) nil)
((= A B) A)
((> A B) (GCD (- A B) B))
((< A B) (GCD (- B A) A))))

deniscomp

Members


Статус

13 сообщений

Где: Ukraine
Род занятий: дистрибьютор
Возраст: 34

#1149   2010-01-14 21:56 GMT+3 часа(ов)      
граждане - мне осталось узнать вот эту задачу
14. Функция RANK – упорядочивает список, задан-ный в качестве ее первого аргумента, переставляя его элементы в той последовательности, в какой они встречаются в списке, являющемся значением второго аргумента.

VH

Members


Статус

289 сообщений

Где: ---
Род занятий:
Возраст:

#1150   2010-01-14 22:49 GMT+3 часа(ов)      
Хювёнен-Сеппянен "Мир Лиспа" т.1 стр.230-231:
(defun RANK (L Order)
(cond
((null L) nil)
(T
(INSERT
(car L)
(RANK (cdr L) Order)
Order))))
(defun INSERT (A L Order)
(cond
((null L) (list A))
((BEFOREp A (car L) Order) (cons A L))
(T (cons (car L) (INSERT A (cdr L) Order)))))
(defun BEFOREp (A B Order)
(cond
((null Order) nil)
((eq A (car Order)) T)
((eq B (car Order)) nil)
(T (BEFOREp A B (cdr Order)))))

Я узнаю насчет Webmoney.

deniscomp

Members


Статус

13 сообщений

Где: Ukraine
Род занятий: дистрибьютор
Возраст: 34

#1154   2010-01-15 23:37 GMT+3 часа(ов)      
ок, не стестяняйся, пиши в ЛС координаты , ты нам здорово помог...

отредактировал(а) deniscomp: 2010-01-16 11:02 GMT+3 часа(ов)

deniscomp

Members


Статус

13 сообщений

Где: Ukraine
Род занятий: дистрибьютор
Возраст: 34

#1179   2010-01-21 18:37 GMT+3 часа(ов)      
VH Посмотри личные сообщения
> 1 <


Онлайн :

0 пользователь(ей), 37 гость(ей) :