> 1 <

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

Pest

Members


Статус

5 сообщений

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

#3989   2011-03-11 17:40 GMT+3 часа(ов)      
Здравствуйте! Я тут как и все прочие с целью просить о помощи….
В ЛИСПе абсолютный нуль, так уж сложилось. Имею задание вот такого характера:

Составьте программы на языке Лисп (в среде CLisp) для решения поставленных задач
1.Определить функцию, увеличивающую по модулю на единицу каждый элемент (на всех уровнях) указанного списка.
2.Определить функцию, выводящую те вершины бинарного дерева, которые имеют более трех потомков.

Прошу не судить меня строго сторожил данного сайта и этого форума в частности, если были подобные задачи и я их не заметил. Чувствую что это базовые и элементарные задачки и судя по прочитанным мною темам, это чрезвычайно раздражает профи этого сайта. Но все же прошу помогите с решением…..

VH

Members


Статус

289 сообщений

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

#3990   2011-03-12 00:25 GMT+3 часа(ов)      
1.
(defun F (L)
(if L
((lambda (elem)
(cons
(if (atom elem)
(cond
((minusp elem) (1- elem))
((plusp elem) (1+ elem))
(T elem))
(F elem))
(F (cdr L))))
(car L))))

Pest

Members


Статус

5 сообщений

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

#3991   2011-03-12 14:21 GMT+3 часа(ов)      
Большое спасибо VN. Очень благодарен тебе.

Pest

Members


Статус

5 сообщений

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

#3993   2011-03-12 14:44 GMT+3 часа(ов)      
Помогите со вторым кто нибудь пожалуйста, прошу....

megamanx

Members


Статус

307 сообщений

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

#3994   2011-03-12 17:24 GMT+3 часа(ов)      
с удовольствием бы, но как вывести вершину? И как считать потомков? В книжках писано много, даже я писал
Можно, конечно, выводить первый элемент списка, у которого больше 3-х элементов...
(defun foo1 (L &optional (len 0) (firsta nil))
(cond
((null L) (if (> len 2) (list firsta) nil))
((null firsta) (foo1 (cdr L) (1+ len) (car L)))
((listp (car L)) (append (foo1 (cdr L) (1+ len) firsta) (foo1 (car L) 0 nil)))
(T (foo1 (cdr L) (1+ len) firsta))))
(foo1 '(A (B (C 2 3 4) (D 2 3) 4 5) (Q (E 2 3 4))))
>>(E B C)

отредактировал(а) megamanx: 2011-03-13 00:13 GMT+3 часа(ов)
I wish I'd made you angry earlier

Pest

Members


Статус

5 сообщений

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

#3995   2011-03-12 20:22 GMT+3 часа(ов)      
Вопрос конечно интересный megamanx, я до этого читал то что вы писали, в принципе все логично и нельзя с этим не согласиться. Бинарное дерево это по сути двоичное дерево. Что касается потомков, здесь все таки под потомками имеется ввиду вложенность интерпретируя списками, списков в списки получается имея список:

(A(B(C(D))(E(F)(G)))(H(I)(J)) получается условию удовлетворяет только А

____________A
______/___________\
_____B____________H
___/___\_________/___\
__C_____E______I_____J
_/_____/____\
D_____F____G

Надеюсь я сам правильно понимаю))...

отредактировал(а) Pest: 2011-03-12 20:29 GMT+3 часа(ов)

megamanx

Members


Статус

307 сообщений

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

#3998   2011-03-13 00:07 GMT+3 часа(ов)      
да, тогда переформулируй в терминах списков, а то я вроде соображаю, но до конца догнать не могу.

отредактировал(а) megamanx: 2011-03-13 00:14 GMT+3 часа(ов)
I wish I'd made you angry earlier

Pest

Members


Статус

5 сообщений

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

#4000   2011-03-13 12:56 GMT+3 часа(ов)      
Попробую) Думаю если представлять бинарное дерево в виде списков (надеюсь правильно уловил представление списков в ЛИСП) получается узел с двумя ветками выглядит так: (элемент(подсписок)(подсписок)) где элемент играет роль вершины, а подсписки роль "ветвей" потомков и каждый следующий подсписок может иметь такую же структуру и так сколько угодно в глубину. и исходя из условия задания получается считать их нужно в "глубину" т.к. в "ширину" их максимум может быть два, а требуется больше трех.
Если мы имеем список вида
(A(B(C(D(F)(G))(I))(K))) то ответом будет только А потому что в "глубину" более 3-х вложений.
(надеюсь в примере не накосячил со скобками)
> 1 <


Онлайн :

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