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

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

Михаил

Members


Статус

120 сообщений

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

#1600   2010-03-17 05:37 GMT+3 часа(ов)      
> Удали ormap, а иначе разговор не имеет смысла.
Cчитай вместе с ormap для случая с одним списоком: ormap не будет вообще задействован. В чем проблема?

В итоге, для случая с одним списком код будет абсолютно таким же простым как и #1588.

Михаил

Members


Статус

120 сообщений

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

#1601   2010-03-17 05:42 GMT+3 часа(ов)      
> Мне повторить что ты просил? Я не могу удовлетворять
> твои сию минутные потребности.
Я просил обосновать твое высказывание об эффективности. Ты сказал, что реализация свертки сложнее чем для случая с одним списком. По количеству текста да, сложнее. Но по эффективности и там и там для случая с одним списком - одинаково.

misha

Moderators


Статус

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

#1602   2010-03-17 05:44 GMT+3 часа(ов)      
Цитата
Михаил :
> Удали ormap, а иначе разговор не имеет смысла.
Cчитай вместе с ormap для случая с одним списоком: ormap не будет вообще задействован. В чем проблема?

В итоге, для случая с одним списком код будет абсолютно таким же простым как и #1588.

Сколько раз надо повторять: схема не с++.

misha

Moderators


Статус

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

#1603   2010-03-17 05:46 GMT+3 часа(ов)      
Цитата
Михаил :
> Мне повторить что ты просил? Я не могу удовлетворять твои сию минутные потребности.
Я просил обосновать твое высказывание об эффективности.

Простая хвостовая рекурсия всегда будет эффективнее применения любых fold***. Именно это я и хотел сказать.

misha

Moderators


Статус

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

#1604   2010-03-17 05:51 GMT+3 часа(ов)      
Цитата
Михаил :
Ты сказал, что реализация свертки сложнее чем для случая с одним списком. По количеству текста да, сложнее. Но по эффективности и там и там для случая с одним списком - одинаково.

Когда набираешь код на Схеме, забудь про С++. Его правила здесь не действуют.

Михаил

Members


Статус

120 сообщений

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

#1605   2010-03-17 05:52 GMT+3 часа(ов)      
> Сколько раз надо повторять: схема не с++.
Мне ты это говоришь в 1-й раз. И непонятно почему мне.

> Простая хвостовая рекурсия всегда будет эффективнее применения любых fold***.
> Именно это я и хотел сказать.
fold разве в цикл не превратится?

misha

Moderators


Статус

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

#1606   2010-03-17 05:58 GMT+3 часа(ов)      
>> Сколько раз надо повторять: схема не с++.
>Мне ты это говоришь в 1-й раз. И непонятно почему.
Да не тебе. Я постоянно всем твержу: схема не с++.

>> Простая хвостовая рекурсия всегда будет эффективнее применения любых fold***.
>> Именно это я и хотел сказать.
>fold тоже в цикл превратится, не тупи.
Не груби. Правило предварительного вычисления всех аргументов функции никто не отменял. А оптимизация схем-кода вообще дело темное. fold*** будет оптимизирована, но подстановка ее кода(inline) скорее всего выполнятся не будет.

отредактировал(а) misha: 2010-03-17 06:05 GMT+3 часа(ов)

Михаил

Members


Статус

120 сообщений

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

#1607   2010-03-17 06:08 GMT+3 часа(ов)      
> Не груби.
Ты не на те ответы отвечаешь.

> Правило предварительного вычисления всех аргументов функции никто не отменял.
fold преобразуется в обычный цикл. Мой пример не хуже по "эффективности" твоего.

Михаил

Members


Статус

120 сообщений

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

#1608   2010-03-17 06:09 GMT+3 часа(ов)      
> А оптимизация схем-кода вообще дело темное.
Так зачем этим прикрываться обвиняя меня в избыточности?

misha

Moderators


Статус

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

#1609   2010-03-17 06:17 GMT+3 часа(ов)      
Цитата
Михаил :
> А оптимизация схем-кода вообще дело темное.
Так зачем этим прикрываться обвиняя меня в избыточности?

А ты о чем? Я о твоей (roman->arabic lst), а не fold. Впрочем твоя реализация foldr не работает в roman->arabic. И я, и ты - знаем почему так происходит.

Михаил

Members


Статус

120 сообщений

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

#1610   2010-03-17 07:14 GMT+3 часа(ов)      
Да, я ошибся, надо было проверить.
(define (fold-left f c as . bss)
(if (or (null? as)
(ormap null? bss))
c
(apply fold-left f
(apply f (car as) c (map car bss))
(cdr as) (map cdr bss))))
 
(define (fold-right f c as . bss)
(if (or (null? as)
(ormap null? bss))
c
(apply f (car as)
(apply fold-right f c (cdr as) (map cdr bss))
(map car bss))))

misha

Moderators


Статус

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

#1617   2010-03-17 13:07 GMT+3 часа(ов)      
Как вариант:
(define (fold-right fun start . lst)
(if (do ((l lst (cdr l)))
((or (null? (car l))
(null? (cdr l))) (null? (car l))))
start
(apply fun
(append (map car lst)
(list (apply fold-right fun start
(map cdr lst)))))))
> (fold-right list 1 '(/ - * /) '(1 2 3 4) '(5 6 7 8 9 10))
(/ 1 5 (- 2 6 (* 3 7 (/ 4 8 1))))

misha

Moderators


Статус

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

#1618   2010-03-17 16:42 GMT+3 часа(ов)      
Моя самая быстрая версия:
(define (fold-right fun start lst . lsts)
(if (null? lsts)
(let foldr-lst ((l lst))
(if (null? l)
start
(fun (car l) (foldr-lst (cdr l)))))
(let foldr-lsts ((l (cons lst lsts)))
(if (do ((l l (cdr l)))
((or (null? (car l))
(null? (cdr l))) (null? (car l))))
start
(apply fun
(append (map car l)
(list (foldr-lsts (map cdr l)))))))))


Онлайн :

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