Мне очень нравится вот эта конструкция в R: http://stat.ethz.ch/R-manual/R-patched/l...
R> rp ← read.table("bf-tuning/tuning-root/recall_precision.txt", header=TRUE, sep="\t")
R> rp ← within(rp, { Recall ← TP / (TP + FN); Precision ← TP / (TP + FP); })
R> head(rp)
Thresh TP FP TN FN Recall Precision
1 0 0 0 3091790 13344721 0 NaN
2 1 0 0 3091790 13344721 0 NaN
3 2 0 0 3091790 13344721 0 NaN
Эдакое вынесение левого аргумента оператора . (member access) за скобки блока, с созданием нового scope внутри, в котором становятся доступны члены этого самого левого аргумента.
Что-то очень похожее было в Object Pascal, емнип:
with foo_instance do
begin
method1;
field2 = field3 + 1;
end
Особенно интересна эта штучка в функциональном контексте.
Жаль, что в Хаскеле нет произвольно вкладываемых областей видимости и оператора «.».
ulidtko
07.12.2011 19:40
Recommended by:
@238328
Do you really want to delete ?
> и оператора «.».
Prelude> :t (.)
(.) :: (b → c) → (a → b) → a → c
ЧЯДНТ?
да у тебя же питон
зря ты подумал, что я забыл о композиции функций. Я не забыл даже о module-level вложенных скоупах и точках в квалификациях этих самых скоупов.
Но это не то. Точка имеется ввиду классическая, оопешная.
што. В питоне, кстати, не подобной конструкции. Тамошний with — это совсем другое.
Я думаю, что с TH все в твоих руках. Ты вполне можешь переписать AST должным образом, ящетаю.
а что это ?! быдлоя в этом плюсцы не видит
я к сожалению TH ещё не тыкал, не знаю как там всё.
Я тоже :3
смотри, у тебя есть инстанс foo. У него есть члены: метод bar(integer) и поле baz. В обжект паскале ты можешь написать следующее:
with foo do
begin
bar(15);
baz := 0;
end
Эквивалентным кодом было бы:
foo.bar(15);
foo.baz := 0;
Так понятно?
да, спасибо!