До диадной формы r и md как-то даже не додумался
В r у тебя ошибка. Надо:
r =. <.@(0.5&+@([%]))
.NB или так
r =. <.@(0.5+([%]))
У тебя, если я все верно понял, получается ненужный hook.
f =. 0.5&+
g =. ([%])
получаем:
x f (g y)
, где (g y) == 1
а вот этого поведения не понял:
x f 1 -> (x*0.5) + 1
почему так получается?
ie,
ie>До диадной формы r и md как-то даже не додумался ie>В r у тебя ошибка. Надо: ie>
ie>r =. <.@(0.5&+@([%]))
ie>.NB или так
ie>r =. <.@(0.5+([%]))
ie>
ie>У тебя, если я все верно понял, получается ненужный hook. ie>f =. 0.5&+ ie>g =. ([%]) ie>получаем: ie>x f (g y) ie>, где (g y) == 1 ie>а вот этого поведения не понял: ie>x f 1 -> (x*0.5) + 1 ie>почему так получается?
Ой. А вы аналог Жениной задачки чё ли сочиняете? Хм, похоже уже сочинили...
Кстати, советую юзать fndisplay — с ним многие вещи гораздо прозрачнее:
Здравствуйте, Lazy Cjow Rhrr, Вы писали:
LCR>ie, ie>>У тебя, если я все верно понял, получается ненужный hook. ie>>f =. 0.5&+ ie>>g =. ([%]) ie>>получаем: ie>>x f (g y) ie>>, где (g y) == 1 ie>>а вот этого поведения не понял: ie>>x f 1 -> (x*0.5) + 1 ie>>почему так получается?
LCR>Кстати, советую юзать fndisplay — с ним многие вещи гораздо прозрачнее: LCR>
ie wrote: > R>r =. <.@(0.5&+([%])) > R>md =. (]#0`(r,([-r)$:<:@])@.(*@[) > R>md2 =. {. md {: > > В r у тебя ошибка. Надо: > > r =. <.@(0.5&+@([%]))
Тьфу. Так и было написано. На КПК, на котором J стоит.
> .NB или так > r =. <.@(0.5+([%]))
У меня не работает.. Хотя должно бы.
0.5+([%]) — syntax error
r =. <.@(0.5"0+([%]))
r =. <.@(0.5"_+([%]))
r =. <.@([: 0.5&+ ([%]))
Но самый первый вариант мне понравился больше.
> У тебя, если я все верно понял, получается ненужный hook. > f =. 0.5&+ > g =. ([%]) > получаем: > x f (g y) > , где (g y) == 1 > а вот этого поведения не понял: > x f 1 -> (x*0.5) + 1 > почему так получается?
Неясно. Наверное, (x monad y) = (monad ^: x) y
Здравствуйте, raskin, Вы писали:
>> r =. <.@(0.5+([%])) R>У меня не работает.. Хотя должно бы. R>0.5+([%]) — syntax error
У мена все ок на Engine: j601/2006-11-10/14:25
R>
R> r =. <.@(0.5"0+([%]))
R> r =. <.@(0.5"_+([%]))
R> r =. <.@([: 0.5&+ ([%]))
R>
R>Но самый первый вариант мне понравился больше.
+1
>> а вот этого поведения не понял: >> x f 1 -> (x*0.5) + 1 >> почему так получается? R>Неясно. Наверное, (x monad y) = (monad ^: x) y
Сорри. Короче, предположим, у нас есть некий забубенный глагол, скажем (* %~ &. (+/ % #)) и нам надо выяснить, как он работает. Вот, с помощью fndisplay мы определяем псевдоглаголы P Q и R и эмулируем этот забубенный глагол с помощью P Q R. Получаем выражение, которое легко читается: _X_ означает диаду, X_ — монаду, _XI_ — обратную диаду, XI_ — обратную монаду.
LCR>>а x f 1 вообще некорректное выражение
ie>вот я и не понимаю почему интерпритатор его кушает ie>
ie> 2 f 1
ie>2
ie> 6 f 1
ie>4
А можешь набрать просто f, чтобы он просто бокс выдал, чтобы просто посмотреть на него?
Здравствуйте, Lazy Cjow Rhrr, Вы писали:
ie>>Ниче не понял, можешь пояснить, плз.
LCR>Сорри. Короче, предположим, у нас есть некий забубенный глагол, скажем (* %~ &. (+/ % #)) и нам надо выяснить, как он работает. Вот, с помощью fndisplay мы определяем псевдоглаголы P Q и R и эмулируем этот забубенный глагол с помощью P Q R. Получаем выражение, которое легко читается: _X_ означает диаду, X_ — монаду, _XI_ — обратную диаду, XI_ — обратную монаду.
Ок, побалуюсь
LCR>А можешь набрать просто f, чтобы он просто бокс выдал, чтобы просто посмотреть на него?
ie wrote: > Здравствуйте, raskin, Вы писали: > >> > r =. <.@(0.5+([%])) > R>У меня не работает.. Хотя должно бы. > R>0.5+([%]) — syntax error > > У мена все ок на Engine: j601/2006-11-10/14:25
501-pocketpc...
>> > а вот этого поведения не понял: >> > x f 1 -> (x*0.5) + 1 >> > почему так получается? > R>Неясно. Наверное, (x monad y) = (monad ^: x) y > > Ничего по этому поводу пока найти не могу
Это, кажется, где-то мимоходом сказано. Ну и эксперимент подтверждает.
Здравствуйте, eao197, Вы писали:
E>Например, стандартные пакеты std.traits и std.typetuple уже содержат то, что в C++ достигается килобайтами кода из Boost-a. Красота однако, аж слюньки текут.
В news-группе digitalmars.D в последнее время стал часто появляться небезызвестный изобретатель трехэтажных шаблонов, Андрей Александреску.
Вот например, предложил написать обобщенный вариант функции max, удовлетворяющей следующим условиям:
a) generic
b) efficient
c) preserve lvalueness when possible such that one can write e.g.
max(arr[0], arr[1]) *= 0.9;
d) should accept two or more arguments
e) should return the "smartest" type, e.g. max of an unsigned int and
unsigned long should return unsigned long
f) short and easy to understand
Вот так всегда -- появляется что-нибудь хорошее, как налетают любители повыпендриваться, которые опошляют всю идею
Не дай бог пойдет Вальтер на поводу у Александреску и превратиться D в еще более навороченный и еще медленее компилируемый язык, чем C++
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Ой, чо с D: подтянулся Александреску, начались пошлос
eao197 wrote: > В news-группе digitalmars.D в последнее время стал часто появляться > небезызвестный изобретатель трехэтажных шаблонов, Андрей Александреску.
Ничего, вот еще Буст портируют и вообще красота будет
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[3]: Ой, чо с D: подтянулся Александреску, начались пошлос
Здравствуйте, Cyberax, Вы писали:
>> В news-группе digitalmars.D в последнее время стал часто появляться >> небезызвестный изобретатель трехэтажных шаблонов, Андрей Александреску. C>Ничего, вот еще Буст портируют и вообще красота будет
Вообще-то в портировании Boost-а в D (ну или какой-то его части), имхо, смысла может быть больше, чем в развитии Boost-а для C++.
Во-первых, шаблоны в D проще и, похоже, мощнее, чем в C++. Так что страшный шаблонный код в C++ может стать вполне пристойным в D.
Во-вторых, для D сейчас нет зоопарка разных библиотек, поэтому любая более-менее удачная и функциональная библиотека может просто-напросто стать де-факто стандартом. Чего с Boost-ом в C++ не произойдет из-за того, что много проектов стартовало еще в до-Boost-овскую эпоху.
В-третьих, скорость компилятора D такова, что применение в D-шной программе монстров а-ля Boost не будет заметно сказываться на скорости компиляции программы (в отличии от C++).
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Ой, чо с D: подтянулся Александреску, начались пошлос
Здравствуйте, eao197, Вы писали:
E>В-третьих, скорость компилятора D такова, что применение в D-шной программе монстров а-ля Boost не будет заметно сказываться на скорости компиляции программы (в отличии от C++).
Ну это пока там до 4-х этажных шаблонов не добрались . А вообще правильный подход, как уже говорилось, подход Немерле: метапрограммы — это обычные компилируемые программы, оперирующие AST и вставляющие декларации членов/классов если надо. И тогда не надо этих плясок с 4-х этажными шаблонами.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Ой, чо с D: подтянулся Александреску, начались пошлос
Здравствуйте, Андрей Хропов, Вы писали:
АХ>Здравствуйте, eao197, Вы писали:
E>>В-третьих, скорость компилятора D такова, что применение в D-шной программе монстров а-ля Boost не будет заметно сказываться на скорости компиляции программы (в отличии от C++).
АХ>Ну это пока там до 4-х этажных шаблонов не добрались .
Так надобность в четырехэтажных шаблонах в D гораздо меньше чем в C++.
АХ>А вообще правильный подход, как уже говорилось, подход Немерле:
Ты наверно хотел сказать лиспа?
АХ>метапрограммы — это обычные компилируемые программы, оперирующие AST и вставляющие декларации членов/классов если надо. И тогда не надо этих плясок с 4-х этажными шаблонами.
Какие пляски еще немного дошлифовать D и будет тихий медленный танец
Re[6]: Ой, чо с D: подтянулся Александреску, начались пошлос
Здравствуйте, FR, Вы писали:
АХ>>А вообще правильный подход, как уже говорилось, подход Немерле:
FR>Ты наверно хотел сказать лиспа?
Да, идея в общем та же.
С Лиспом меньше знаком. Там вообще-то они насколько я знаю не всегда компилируются. Но не суть. Пусть будет Лиспа, раз уж там это раньще придумали.
АХ>>метапрограммы — это обычные компилируемые программы, оперирующие AST и вставляющие декларации членов/классов если надо. И тогда не надо этих плясок с 4-х этажными шаблонами.
FR>Какие пляски еще немного дошлифовать D и будет тихий медленный танец
Ну меня напрягает само то, что приходится изобретать какие-то чисто функциональные метафункции. Проще разрешить работать с AST да и все. И ввести специальный синтаксис для вставки кода и API компилятора для вставки деклараций.
Правда, и в Немерле и D меня напрягает, то что нет работы с lvalue, поэтому и там и там пока не получится реализовать