Re[16]: Ой, чо с D деется-то!?
От: raskin Россия  
Дата: 26.11.06 18:45
Оценка:
ie wrote:
> ie>А кстати! J, дайте J!!
>
> Как-то не особо гламурно получилось
>
> r =. [:<.0.5+({.%}.) .NB round(trxCount/trxCount)
> md =. ([:|.6{.|.)@([:#:{:@(+(-@r@(2&{.),_1,(2^([:<:1&{))*r@(2&{.))^1&{)))@(,&0)
> md 2 6 .NB вернет [0 0 1 0 1 0]

Ну.. Как-то правда сложно.

r =. <.@(0.5&+([%]))
md =. (]#0:)`(r,([-r)$:<:@])@.(*@[)
md2 =. {. md {:


Бонусы: 2&{. — это, в данном случае, {: (tail). И не надо делить на
1-элементный список, полученный }. (behead).

А во всех antibase и capped forks я не стал разбираться.
Posted via RSDN NNTP Server 2.1 beta
Re[17]: Ой, чо с D деется-то!?
От: ie Россия http://ziez.blogspot.com/
Дата: 27.11.06 04:06
Оценка:
Здравствуйте, raskin, Вы писали:

>> ie>А кстати! J, дайте J!!

>>
>> Как-то не особо гламурно получилось
>>
>> r =. [:<.0.5+({.%}.) .NB round(trxCount/trxCount)
>> md =. ([:|.6{.|.)@([:#:{:@(+(-@r@(2&{.),_1,(2^([:<:1&{))*r@(2&{.))^1&{)))@(,&0)
>> md 2 6 .NB вернет [0 0 1 0 1 0]

R>Ну.. Как-то правда сложно.


Дык, первый блин

R>
R>r =. <.@(0.5&+([%]))
R>md =. (]#0:)`(r,([-r)$:<:@])@.(*@[)
R>md2 =. {. md {:
R>




До диадной формы 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
почему так получается?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[18]: Ой, чо с D деется-то!?
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 27.11.06 04:49
Оценка:
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 — с ним многие вещи гораздо прозрачнее:
   load 'system/packages/misc/fndisplay.ijs'
   defverbs 'P Q R'
   setfnform 'Jv'

   0 (P Q~ &. R) 1
+-------------------------+
|0 _P_ RI_ (R_ 1) _Q_ R_ 1|
+-------------------------+


g y кстати не всегда 1. Попробуй подставить 0.
а x f 1 вообще некорректное выражение
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[19]: Ой, чо с D деется-то!?
От: ie Россия http://ziez.blogspot.com/
Дата: 27.11.06 05:09
Оценка:
Здравствуйте, 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>
LCR>   load 'system/packages/misc/fndisplay.ijs'
LCR>   defverbs 'P Q R'
LCR>   setfnform 'Jv'

LCR>   0 (P Q~ &. R) 1
LCR>+-------------------------+
LCR>|0 _P_ RI_ (R_ 1) _Q_ R_ 1|
LCR>+-------------------------+
LCR>


Ниче не понял, можешь пояснить, плз.

LCR>g y кстати не всегда 1. Попробуй подставить 0.


+1

LCR>а x f 1 вообще некорректное выражение


вот я и не понимаю почему интерпритатор его кушает

2 f 1
2
6 f 1
4

... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[18]: Ой, чо с D деется-то!?
От: raskin Россия  
Дата: 27.11.06 06:16
Оценка:
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
Posted via RSDN NNTP Server 2.1 beta
Re[19]: Ой, чо с D деется-то!?
От: ie Россия http://ziez.blogspot.com/
Дата: 27.11.06 06:33
Оценка:
Здравствуйте, 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

Ничего по этому поводу пока найти не могу
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[20]: Ой, чо с D деется-то!?
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 27.11.06 06:48
Оценка:
ie,


LCR>>Кстати, советую юзать fndisplay — с ним многие вещи гораздо прозрачнее:

LCR>>
LCR>>   load 'system/packages/misc/fndisplay.ijs'
LCR>>   defverbs 'P Q R'
LCR>>   setfnform 'Jv'

LCR>>   0 (P Q~ &. R) 1
LCR>>+-------------------------+
LCR>>|0 _P_ RI_ (R_ 1) _Q_ R_ 1|
LCR>>+-------------------------+
LCR>>


ie>Ниче не понял, можешь пояснить, плз.


Сорри. Короче, предположим, у нас есть некий забубенный глагол, скажем (* %~ &. (+/ % #)) и нам надо выяснить, как он работает. Вот, с помощью 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, чтобы он просто бокс выдал, чтобы просто посмотреть на него?
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[21]: Ой, чо с D деется-то!?
От: ie Россия http://ziez.blogspot.com/
Дата: 27.11.06 07:12
Оценка:
Здравствуйте, Lazy Cjow Rhrr, Вы писали:

ie>>Ниче не понял, можешь пояснить, плз.


LCR>Сорри. Короче, предположим, у нас есть некий забубенный глагол, скажем (* %~ &. (+/ % #)) и нам надо выяснить, как он работает. Вот, с помощью fndisplay мы определяем псевдоглаголы P Q и R и эмулируем этот забубенный глагол с помощью P Q R. Получаем выражение, которое легко читается: _X_ означает диаду, X_ — монаду, _XI_ — обратную диаду, XI_ — обратную монаду.


Ок, побалуюсь

LCR>А можешь набрать просто f, чтобы он просто бокс выдал, чтобы просто посмотреть на него?

+---+-+-+
¦0.5¦&¦+¦
+---+-+-+
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re[22]: Ой, чо с D деется-то!?
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 27.11.06 16:10
Оценка:
ie,

LCR>>А можешь набрать просто f, чтобы он просто бокс выдал, чтобы просто посмотреть на него?

ie>
ie>+---+-+-+
ie>¦0.5¦&¦+¦
ie>+---+-+-+
ie>


Нашлись ноги. Тут: http://rsdn.ru/Forum/Message.aspx?mid=2235622&amp;only=1
Автор: Lazy Cjow Rhrr
Дата: 27.11.06
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[20]: Ой, чо с D деется-то!?
От: raskin Россия  
Дата: 27.11.06 18:23
Оценка:
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
>
> Ничего по этому поводу пока найти не могу
Это, кажется, где-то мимоходом сказано. Ну и эксперимент подтверждает.
Posted via RSDN NNTP Server 2.1 beta
Re[16]: Ой, чо с D деется-то!?
От: Трурль  
Дата: 28.11.06 08:29
Оценка: 23 (2)
Здравствуйте, ie, Вы писали:
ie>А кстати! J, дайте J!!

ie>
ie>r =. [:<.0.5+({.%}.) .NB round(trxCount/trxCount)
ie>md =. ([:|.6{.|.)@([:#:{:@(+(-@r@(2&{.),_1,(2^([:<:1&{))*r@(2&{.))^:(1&{)))@(,&0)
ie>md 2 6 .NB вернет [0 0 1 0 1 0]
ie>

А вот два варианта на К.
длинный
round: {_0.5+x}
make_dist:{[trx_count; quantum_count]
  result: ()
  do[quantum_count
    result ,: rlast: round[trx_count%quantum_count]
    trx_count -: rlast
    quantum_count -: 1 ]
  result }

и короткий
md:{--':{x-_0.5+x%y}\[x;y-!y]}
Re[17]: Ой, чо с D деется-то!?
От: ie Россия http://ziez.blogspot.com/
Дата: 28.11.06 08:38
Оценка:
Здравствуйте, Трурль, Вы писали:

Т>А вот два варианта на К.


Где его взять то?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Превратим окружающую нас среду в воскресенье.
Re: Ой, чо с D деется-то!?
От: _nn_ www.nemerleweb.com
Дата: 10.12.06 20:54
Оценка:
Здравствуйте, eao197, Вы писали:

E>Например, стандартные пакеты std.traits и std.typetuple уже содержат то, что в C++ достигается килобайтами кода из Boost-a. Красота однако, аж слюньки текут.


Уже добавили std.bind.
Аналог boost::bind.

А также имеется boostAlias, который принимает функцию как шаблон аргумента, а также разбирает out и inout аргументы:
Пример:
void foo(inout int a)
{
  ...
}

int x;
bindAlias!(foo)(&x);
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Ой, чо с D: подтянулся Александреску, начались пошлости
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 23.01.07 09:27
Оценка: 6 (2) :)
В 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


и затем сам же предложил ее решение:
template max
{
private:
   template maxtype(storageof(T1) T1, storageof(T2) T2)
   {
     static if (storageof(T1) T1 == storageof(T2) T2)
       alias storageof(T1) T1 maxtype;
     else
       static if (std.is_num!(T1) && std.is_num!(T2))
         static if (T2.max > T1.max)
           alias T2 maxtype;
         else
           alias T1 maxtype;
       else
         alias typeof(true ? T1 : T2) maxtype;
   }
   maxtype(storageof(T1) T1, storageof(T2) T2)
   max2(T1, T2)(storageof(T1) T1 lhs, storageof(T2) T2 rhs)
   {
     if (rhs > lhs) return rhs;
     return lhs;
   }
public:
   alias std.varargs_reduce!(max2) max;
}

(причем реализацию std.varargs_reduce он предлагает как следующее упражнение ).

Вот так всегда -- появляется что-нибудь хорошее, как налетают любители повыпендриваться, которые опошляют всю идею
Не дай бог пойдет Вальтер на поводу у Александреску и превратиться D в еще более навороченный и еще медленее компилируемый язык, чем C++


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Ой, чо с D: подтянулся Александреску, начались пошлос
От: Cyberax Марс  
Дата: 23.01.07 09:56
Оценка:
eao197 wrote:
> В news-группе digitalmars.D в последнее время стал часто появляться
> небезызвестный изобретатель трехэтажных шаблонов, Андрей Александреску.
Ничего, вот еще Буст портируют и вообще красота будет
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[3]: Ой, чо с D: подтянулся Александреску, начались пошлос
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 23.01.07 10:30
Оценка: +1
Здравствуйте, 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: подтянулся Александреску, начались пошлос
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 23.01.07 11:25
Оценка: :))) :))
eao197,

E>Вот например, предложил написать обобщенный вариант функции max, удовлетворяющей следующим условиям:

E>

E>f) short and easy to understand



Навеяло, "как всегда придёт поручик Ржевский..."
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[4]: Ой, чо с D: подтянулся Александреску, начались пошлос
От: Андрей Хропов Россия  
Дата: 23.01.07 13:34
Оценка: +1
Здравствуйте, eao197, Вы писали:

E>В-третьих, скорость компилятора D такова, что применение в D-шной программе монстров а-ля Boost не будет заметно сказываться на скорости компиляции программы (в отличии от C++).

Ну это пока там до 4-х этажных шаблонов не добрались . А вообще правильный подход, как уже говорилось, подход Немерле: метапрограммы — это обычные компилируемые программы, оперирующие AST и вставляющие декларации членов/классов если надо. И тогда не надо этих плясок с 4-х этажными шаблонами.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Ой, чо с D: подтянулся Александреску, начались пошлос
От: FR  
Дата: 23.01.07 15:38
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

АХ>Здравствуйте, eao197, Вы писали:


E>>В-третьих, скорость компилятора D такова, что применение в D-шной программе монстров а-ля Boost не будет заметно сказываться на скорости компиляции программы (в отличии от C++).


АХ>Ну это пока там до 4-х этажных шаблонов не добрались .


Так надобность в четырехэтажных шаблонах в D гораздо меньше чем в C++.

АХ>А вообще правильный подход, как уже говорилось, подход Немерле:


Ты наверно хотел сказать лиспа?

АХ>метапрограммы — это обычные компилируемые программы, оперирующие AST и вставляющие декларации членов/классов если надо. И тогда не надо этих плясок с 4-х этажными шаблонами.


Какие пляски еще немного дошлифовать D и будет тихий медленный танец
Re[6]: Ой, чо с D: подтянулся Александреску, начались пошлос
От: Андрей Хропов Россия  
Дата: 23.01.07 16:03
Оценка:
Здравствуйте, FR, Вы писали:

АХ>>А вообще правильный подход, как уже говорилось, подход Немерле:


FR>Ты наверно хотел сказать лиспа?


Да, идея в общем та же.
С Лиспом меньше знаком. Там вообще-то они насколько я знаю не всегда компилируются. Но не суть. Пусть будет Лиспа, раз уж там это раньще придумали.

АХ>>метапрограммы — это обычные компилируемые программы, оперирующие AST и вставляющие декларации членов/классов если надо. И тогда не надо этих плясок с 4-х этажными шаблонами.


FR>Какие пляски еще немного дошлифовать D и будет тихий медленный танец


Ну меня напрягает само то, что приходится изобретать какие-то чисто функциональные метафункции. Проще разрешить работать с AST да и все. И ввести специальный синтаксис для вставки кода и API компилятора для вставки деклараций.

Правда, и в Немерле и D меня напрягает, то что нет работы с lvalue, поэтому и там и там пока не получится реализовать

 max(a[0],a[1]) *= 0.9;


в отличие от C++, кстати.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.