> 1 <

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

InKaterina

Members


Статус

6 сообщений

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

#3607   2010-12-07 03:40 GMT+3 часа(ов)      
Извиняюсь за поздний визит, но больше нет сил.за lisp села только седня, что то он мне не дается. задача такая:

Определить рекурсивную функцию, возвращающую количество определенных элементов в списке.

Заранее спасибо

megamanx

Members


Статус

307 сообщений

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

#3608   2010-12-07 11:53 GMT+3 часа(ов)      
для списка и подсписков
(defun foo (A L)
(labels ((ret (A L N)
(cond
((null L) N)
((listp (car L)) (+ (ret A (car L) 0) (ret A (cdr L) N)))
(T
(if (eql (car L) A) (ret A (cdr L) (1+ N)) (ret A (cdr L) N))))))
(ret A L 0)))

без лейблов с опциональной переменной и значением по умолчанию
(defun foo2 (A L &OPTIONAL (N 0))
(cond
((null L) N)
((listp (car L)) (+ (foo2 A (car L)) (foo2 A (cdr L) N)))
(T
(if (eql (car L) A) (foo2 A (cdr L) (1+ N)) (foo2 A (cdr L) N)))))

Да, подозреваю, что следующим вопросом будет, как вызывать функцию
>> (foo 'a '(a s d f (a (g a f a) a a (a () a) a)))
>> 9
I wish I'd made you angry earlier

InKaterina

Members


Статус

6 сообщений

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

#3612   2010-12-07 16:34 GMT+3 часа(ов)      
Спасибо большое за решение!

Не сочтите за наглость, а сочтите за безнадежность (меня подвели с контрольной), есть еще 2 задачи, все уже перепробывала, чтобы разобраться с lisp, ну никак не получается


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

2) пределить функцию, выполняющую для каждой группы из бинарного дерева вида "РебенокЛевый<-Родитель<-РебенокПравый" следующее: увеличить на единицу значение только большего ребенка.

Огромное спасибо!

megamanx

Members


Статус

307 сообщений

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

#3613   2010-12-07 16:53 GMT+3 часа(ов)      
(defun addnum (N L)
(cond
((null L) nil)
((listp (car L)) (cons (addnum N (car L)) (addnum N (cdr L))))
(T (cons (+ N (car L)) (addnum N (cdr L))))))
>>(addnum 1 '(1 (2) (3 (1 1 ((7))) 8 9) 0 0 0))
>>(2 (3) (4 (2 2 ((8))) 9 10) 1 1 1)
 

пока на вторую время нет
I wish I'd made you angry earlier

InKaterina

Members


Статус

6 сообщений

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

#3614   2010-12-07 17:05 GMT+3 часа(ов)      
Благодарю за помощь!

megamanx

Members


Статус

307 сообщений

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

#3616   2010-12-07 17:26 GMT+3 часа(ов)      
Я не очень умный, конечно, но каким образом должно быть представлено это дерево?
Если нужен список, через точечные пары бинарное дерево, подходящее по структуре для сравнения можно задать, например, так:
((1 . 2) . (3 . 4)) - это дерево с 4-мя листьями, симметричное
((1 . 2) . ((3 . 4) . (5 . 6))) - это с шестью, правая ветвь состоит из двух ветвей (и так далее по аналогии)
тогда для такого дерева
(defun incbb (L)
(cond
((null L) nil)
((listp (car L)) (cons (incbb (car L)) (incbb (cdr L))))
(T (if (> (car L) (cdr L))
(cons (1+ (car L)) (cdr L))
(cons (car L) (1+ (cdr L)))))))
>>(incbb '((1 . 2) . ((5 . 4) (7 . 12))))
>>((1 . 3) (6 . 4) 7 . 13)

скобочки не совпали, но дерево по структуре осталось тем же.
I wish I'd made you angry earlier

InKaterina

Members


Статус

6 сообщений

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

#3617   2010-12-07 17:51 GMT+3 часа(ов)      
но каким образом должно быть представлено это дерево?

эх, если бы нам еще объяснили, я заочно учусь, дали задание и все. а возможности спросить сейчас нет, институт закрыт (из-за погоды). Но я думаю ты прав, и большое тебе спасибо.
P.S. а со скобочками у меня все нормально
> 1 <


Онлайн :

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