Предыдущая страница [1] > 2 <

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

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#4920   2011-10-24 15:42 GMT+3 часа(ов)      
>Спасибо, я знаю. Только к чему ты это сказал?
Не за что) Твой append выходит за рамки функционального подхода

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#4921   2011-10-24 15:47 GMT+3 часа(ов)      
V-списки могут стать выходом, тем более что они довольно легко реализуются на схеме.

joba

Members


Статус

157 сообщений

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

#4922   2011-10-24 15:50 GMT+3 часа(ов)      
>Не за что) Твой append выходит за рамки функционального подхода

Спасибо, я знаю. Я же просто переписал scheme_append c Си на схему, чтобы наглядно показать как этот встроенный append работает.

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#4923   2011-10-24 15:55 GMT+3 часа(ов)      
>Спасибо, я знаю. Я же просто переписал scheme_append c Си на схему, чтобы наглядно показать как этот встроенный append работает.
Не за что) И что дальше?

joba

Members


Статус

157 сообщений

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

#4924   2011-10-24 15:59 GMT+3 часа(ов)      
>И что дальше?

Ну т.е. я не имел в виду, что надо использовать мой append2, он был здесь приведен просто для пояснения. Использовать нужно обычный append, или, если писать свой, то через хвостовые cons'ы.

joba

Members


Статус

157 сообщений

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

#4925   2011-10-24 16:12 GMT+3 часа(ов)      
>Создай структуру ArrayList, состоящую из массива и указателя(счетчик) на его фиктивный конец.

А, ну так это уже не совсем массив будет.

joba

Members


Статус

157 сообщений

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

#4926   2011-10-24 16:21 GMT+3 часа(ов)      
Лучше, кстати, создать структуру, состоящую из списка и указателя на его последнюю ячейку. Тогда добавление будет работать еще даже быстрее, чем mappend!.

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#4927   2011-10-24 16:32 GMT+3 часа(ов)      
Конечно, если требуется часто добавлять элементы в конец списка, то лучше использовать список и последнюю ячейку. Но если необходим также и быстрый доступ к элементу списка по его индексу, то лучше массив.

Kergan

Members


Статус

300 сообщений

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

#4930   2011-10-25 10:01 GMT+3 часа(ов)      
Цитата
joba :
Кстати, смотри:
 
(define (cons2 a b) (cons a b))
(collect-garbage)(time (begin (fold-right cons2 (list 0) test-list) 1))
 
cpu time: 2008 real time: 2177 gc time: 1492


Видишь, все именно так как я и говорил происходит: проверяется, является ли параметр-функция функцией cons, и если не является, то облом.


Да нет, просто компилятор и JIT учитывают является ли ф-я нативной, свободной от сайд-эффектов и т.п., вот видимо здесь это и работает. Вполне возможно, что (fold-right cons ...) разворачивается в длииииинную лапшу из заинлайненных ф-й, в которой потом просто инструкции перетасовываются для оптимизации.

Kergan

Members


Статус

300 сообщений

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

#4931   2011-10-25 10:12 GMT+3 часа(ов)      
и кстати:
 
> (collect-garbage)
> (time (begin (append2 test-mlist (mlist 0)) 1))
cpu time: 15 real time: 18 gc time: 0
1
> (time (begin (append2 test-mlist (mlist 0)) 1))
cpu time: 15 real time: 20 gc time: 0
1
> (time (begin (mappend2 test-mlist (mlist 0)) 1))
cpu time: 140 real time: 141 gc time: 0
1
> (time (begin (mappend2 test-mlist (mlist 0)) 1))
cpu time: 63 real time: 54 gc time: 0
1
> (time (begin (mappend2 test-mlist (mlist 0)) 1))
cpu time: 203 real time: 245 gc time: 94
1
> (time (begin (mappend2 test-mlist (mlist 0)) 1))
cpu time: 250 real time: 245 gc time: 93
1
>
(time (begin (mappend2 test-mlist (mlist 0)) 1))
cpu time: 235 real time: 250 gc time: 93
1
> (time (begin (mappend2 test-mlist (mlist 0)) 1))
cpu time: 266 real time: 256 gc time: 94
1
> (time (begin (append2 test-mlist (mlist 0)) 1))
cpu time: 16 real time: 20 gc time: 0
1
> mappend
#<procedure:mappend>
> (time (begin (mappend test-mlist (mlist 0)) 1))
cpu time: 141 real time: 138 gc time: 0
1
> (time (begin (mappend test-mlist (mlist 0)) 1))
cpu time: 94 real time: 103 gc time: 0
1
> (time (begin (mappend test-mlist (mlist 0)) 1))
cpu time: 234 real time: 238 gc time: 79
1
> (time (begin (mappend test-mlist (mlist 0)) 1))
cpu time: 235 real time: 247 gc time: 78
1
>
 

так что append2 таки шустрее


Онлайн :

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




Реклама на сайте: