ulidtko 07.12.2011 19:40

Мне очень нравится вот эта конструкция в 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

Особенно интересна эта штучка в функциональном контексте.
Жаль, что в Хаскеле нет произвольно вкладываемых областей видимости и оператора «.».

Recommended by: @238328
1. 0xd34df00d 07.12.2011 19:41 Azoth_primary

> и оператора «.».

Prelude> :t (.)
(.) :: (b → c) → (a → b) → a → c

ЧЯДНТ?

2. rman 07.12.2011 19:42 утюга

да у тебя же питон

3. ulidtko0xd34df00d /1 07.12.2011 19:43

зря ты подумал, что я забыл о композиции функций. Я не забыл даже о module-level вложенных скоупах и точках в квалификациях этих самых скоупов.

Но это не то. Точка имеется ввиду классическая, оопешная.

4. ulidtkorman /2 07.12.2011 19:43

што. В питоне, кстати, не подобной конструкции. Тамошний with — это совсем другое.

5. 0xd34df00dulidtko /3 07.12.2011 19:43 Azoth_primary

Я думаю, что с TH все в твоих руках. Ты вполне можешь переписать AST должным образом, ящетаю.

6. rmanulidtko /4 07.12.2011 19:44 утюга

а что это ?! быдлоя в этом плюсцы не видит

7. ulidtko0xd34df00d /5 07.12.2011 19:45

я к сожалению TH ещё не тыкал, не знаю как там всё.

8. 0xd34df00dulidtko /7 07.12.2011 19:46 Azoth_primary

Я тоже :3

9. ulidtkorman /6 07.12.2011 19:48

смотри, у тебя есть инстанс foo. У него есть члены: метод bar(integer) и поле baz. В обжект паскале ты можешь написать следующее:

with foo do
begin
bar(15);
baz := 0;
end

Эквивалентным кодом было бы:

foo.bar(15);
foo.baz := 0;

Так понятно?

10. rmanulidtko /9 07.12.2011 19:59

да, спасибо!

Do you really want to delete ?