в продолжении Функциональный tcl
как-то внезапно получились lazy и memoize :) это уже в добавок к map,fold,filter,zip,compose и прочим.
Демка:
#!/usr/bin/tclsh
source functional.tcl
namespace import f::*
# функция, что ну очень долго и нудно работает
set massive {{x} {
puts "Чтото-там считаем над x=$x"
after 1000
puts "Читаем файлы и Обращаемся к серверам"
after 1000
puts "че-то получили"
set x
}}
# но будет её соханять её результаты :)
set massive [ memoize $massive ]
set vector {}
foreach i [ range 0 10000 ] {
lappend vector [ lazy $massive $i ]
}
set subvect [ lrange $vector 100 102 ]
set n100 [ invoke2 $massive 100 ]
set n100plus200 [ chain $massive {expr 200+} 100 ]
puts "=== Calcs done :) ==="
puts "ИТОГО:"
puts "massive 100..102 = $subvect"
puts "massive 100 = $n100"
puts "massive 100+200 = $n100plus200"
Чтото-там считаем над x=100
Читаем файлы и Обращаемся к серверам
че-то получили
=== Calcs done :) ===
ИТОГО:
Чтото-там считаем над x=101
Читаем файлы и Обращаемся к серверам
че-то получили
Чтото-там считаем над x=102
Читаем файлы и Обращаемся к серверам
че-то получили
massive 100..102 = 100 101 102
massive 100 = 100
massive 100+200 = 300
Хотелось бы узнать мнение сообщества об:
1) Наиболее естественный синтаксис для map,fold,filter и прочего. Сейчас
map func1 func .. funcN {argList}Но может быть
map {funcList} arg1 arg2 .. argNили
map {funcList} {argList}
2) Какие удобные фичи стоит подсмотреть в других языках ?