LINUX.ORG.RU

Функциональный tcl (часть2)

 ,


1

2

в продолжении Функциональный 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) Какие удобные фичи стоит подсмотреть в других языках ?

★★★★★

Последнее исправление: cetjs2 (всего исправлений: 2)

Ответ на: комментарий от trashymichael

Нет, вероятно, это реализация того, что называется «атласом» в терминологии Nial: применение кучи функций к одному набору аргументов.

buddhist ★★★★★
()

map {funcList} {argList}

Так логичнее всего и удобней при генерации списков аргументов, что для тикля... ну ты понял.

Тикль видел много, но вот по этой теме был бы неплох мануал какой-нить - а то я в функциональном кодинге дуб дубом.

Suntechnic ★★★★★
()

слушай, а ты это выкладываешь куда-нибудь? Я бы ебилд для генты накатал, ибо выглядит вкусно.

anonymous
()
Ответ на: комментарий от anonymous

выкладывается на https://www.assembla.com/spaces/tclamba, но ебилд делать рановато. Пока синтаксис команд не устоялся, а то я его верчу туда-сюда в поисках наиболее удобного в использовании и желательно понятного (для lisp`еров в частности) вида.

MKuznetsov ★★★★★
() автор топика

Хайяааааааа!!!!

Сори за офтоп - наконец-то дождался выхода ActiveTcl 8.6! Но опять проблема с моим гондурасом :( Просьба к отзывчивому и доброму человеку: скачать и выложить хоть куда обе офтопичные версии.

yyk ★★★★★
()
Ответ на: комментарий от MKuznetsov

ok. Отпишись потом в новый тред, когда синтаксис стабилизируешь.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.