> 1 <

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

kreon

Members


Статус

1 сообщений

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

#3419   2010-11-16 00:48 GMT+3 часа(ов)      
Используя метод параметров накопления определить функцию 1_2(X), где X - список произвольной длины, а результат функции - список двух элементов, количество элементов на верхнем уровне та общее количество элементов списка

Для решения этой задачи у меня есть две функции
1) количество элементов на верхнем уровне (помоему в lisp уже есть для этих целкй функция length, но на всякий случай
 (defun len(l) 
(cond ((null l) 0)
(t (+1 len (cdr l))))))
 

2) общее количество элементов списка
(defun atomiv(l)
(cond ((null l) 0)
((atomiv (car l))
(+1 (atomiv (cdr l))))
(t (+ atomiv (car l))
(atomiv (cdr l))))))
 


Но как это всё слепить в одну функцию, используя метод параметров накопления не знаю, помогите пожалуйста!!!

megamanx

Members


Статус

307 сообщений

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

#3423   2010-11-16 14:35 GMT+3 часа(ов)      
1) пишите верно, ваш лен невалиден
2) что такое метод накопления
http://ru.wikibooks.org/wiki/Основы_функционального_программирования/Структуры_данных_и_базисные_операции_—_2
3) пример
вот такой лен1
(defun len1(L n)
(cond
((null L) n)
(T (len1 (cdr L) (1+ n)))))

проверка
(time (dotimes (_ 100000) (len '(1 2 3 4 5 6 7 8 9 0))))
>>> 25.602.742
(time (dotimes (_ 100000) (len1 '(1 2 3 4 5 6 7 8 9 0) 0)))
>>> 16.102.724
(time (dotimes (_ 100000) (length '(1 2 3 4 5 6 7 8 9 0) 0)))
>>> 101.178

4) пока всё

отредактировал(а) megamanx: 2010-11-17 02:31 GMT+3 часа(ов)
I wish I'd made you angry earlier
> 1 <


Онлайн :

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