Курилка,
LCR>>Если же после некоторого копания и общения пользователь в итоге отворачивается от языка — это приближает язык, хотя бы на миллиметр, но к смерти.
К>Есть такое, противоположным мне кажется пример лисп-комьюнити — очень раздробленного и часто чуть ли не нападающего на новичков (особенно говорящих, что от скобок можно избавиться )
У меня тоже создалось такое ощущение. Хотя вот cl-user утверждает, что новички сами злобные буратины и имхо он ошибается
К>А J не занимает разве?
Ну я говорю о решении задач, тривиальных и не очень. А J у меня используется в качестве мегакалькулятора (чаще всего на ppc), когда надо что-то быстро вычислить. Например, сколько стоит скачать файл объёмом 531030896 байт
Здравствуйте, Lazy Cjow Rhrr, Вы писали:
К>>Есть такое, противоположным мне кажется пример лисп-комьюнити — очень раздробленного и часто чуть ли не нападающего на новичков (особенно говорящих, что от скобок можно избавиться )
LCR>У меня тоже создалось такое ощущение. Хотя вот cl-user утверждает, что новички сами злобные буратины и имхо он ошибается
Ну может и ошибаюсь несколько — не знаю, ибо смотрю со своей колокольни.
По аналогии с лиспом — у Н дейсвительно очень мало информации на русском. Более того — её почти нет и на английском. Не ругайтесь — дайте развить мысль : языки .NET — это если не в первую очередь, то во вторую — сам .NET. Что получается — хочешь писать на Н — смотри доку по .NET, а там если и есть примеры — то только для C#. Самого же Н без дотнета действительно "всего ничего". Т.е. тем, кто знает дотнет — широкая дорога. Кто не знает — гуськом по свежевспаханному полю...
Что самое интересное — некоторые вот так и двигаются
Здравствуйте, _nn_, Вы писали:
LCR>>Но частенько задачки "на пощщитать" выпадают не такие тривиальные и calc.exe уже не поможет вообще.
__><offtopic> __>У меня вместо калькулятора Python. убедите в использовании J. __></offtopic>
Тут зависит от того, что тебе надо от калькулятора. Если посчитать сколько стоит скачать файл объёмом 531030896 байт, то, пожалуй, не имеет значение что тут использовать J или Python, или любой другой интерпритатор.
Однако задачки посложнее на J считать удобней, что не удивительно, это же математическая машина. Вот например формула по расчету остатка после выплаты подоходного налога с 75% от общей суммы (звали как-то на работу, они выплачивают только 25% подоходного, но я планировал с 75% оставшихся платить сам):
rest =. -0.13*(-%&4)
rest 10000
9025
Может с первого взгляда и непонятно (тут уж ничего не поделаешь, специфика J), зато кратко
Еще недавно считал стоимость машины в Новосибирске в зависимости от цены ее продажи на аукционе в Японии + таможня (которая зависила от года и объема) + доставка по Японии и по РФ. Короче полно сервисов, которые это делать умеют, но для этого надо на 5ок страниц зайти, на одной томожню посчитать, на другой доставку... Короче надоело, налабал на коленке. В принципе тут тоже все на любом языке все пишется, но на J у меня получилось 2 таблички с данными и 2 строчки кода
_nn_,
__><offtopic> __>У меня вместо калькулятора Python. убедите в использовании J. __></offtopic>
Я с товарищем иду в магазин, там мы затариваемся разной всячиной (он платит), однако некоторые вещи он не будет есть вообще, некоторые будет есть только он, а некоторые мы будем есть пополам. Значит я ему должен:
prices =. 47 58 29 22 32 55 5 55 73 58
own =. 0 1 0 1 2 1 0 1 2 2 NB. 0 - мне не надо, 1 - пополам, 2 - всё моё
debt =. -: @: (+/ .*) NB. мой долг ему
own debt prices
258
Иногда требуется повозиться с натуральными дробями. В J это делается напрямую:
32r564 + 33r566
9181r79806
Разложение на простые числа — часто помогает, я таким образом запомнил мой код на карточке
q: 123456
2 2 2 2 2 2 3 643
Ещё один тривиальный пример — как только появляется что-то типа циклов на массивах, J начинает рулить конкретно. Среднее арифметическое:
mean =. +/ % #
mean 1 2 3 4 5 6
3.5
rev=: |.&.;:
rev 'something like rsdn'
rsdn like something
Вот примерно поэтому и нравится. Два крючка, два значка, и посередине скобочки — вот и готова функция Здесь и сейчас, и делает что надо.
<skip>
LCR>Вот примерно поэтому и нравится. Два крючка, два значка, и посередине скобочки — вот и готова функция Здесь и сейчас, и делает что надо.
Симпатия к J у меня есть, но не я знаю если можно полностью заменить калькулятор питона
Еще один вопрос про J: есть ли поддержка в конвертация десятичная <=> шестандцатеричная система счисления, а также кодировка строк ?
Здравствуйте, Lazy Cjow Rhrr, Вы писали:
LCR>Вот примерно поэтому и нравится. Два крючка, два значка, и посередине скобочки — вот и готова функция Здесь и сейчас, и делает что надо.
Попробовал — понравилось
Раньше у меня в этой роли выстпали Mathcad, Matlab и Maple (в разной последовательности). Там, конечно, всё потяжеловесней. Самым удобным был Mathcad. В остальных постоянно забывались то синтаксис, то функции . Да и платные они все.
_nn_,
LCR>>Вот примерно поэтому и нравится. Два крючка, два значка, и посередине скобочки — вот и готова функция Здесь и сейчас, и делает что надо.
__>Еще один вопрос про J: есть ли поддержка в конвертация десятичная <=> шестандцатеричная система счисления, а также кодировка строк ?
Все эти функции давно украдены до нас, то есть написаны и входят в стандартную библиотеку
load 'system/main/convert.ijs'
hfd 1234 NB. hex from decimal
4D2
dfh 'abcd' NB. decimal from hex
43981
load 'system/packages/misc/base64.ijs'
tobase64 'ab'
YWI=
frombase64 'YWI='
ab
Хотя если бы не было, то наверное написать свои конвертеры вряд ли было бы проблемой, во всяком случае пресловутый base64.ijs не бог весть какой сложный:
BASE64=: (a.{~ ,(a.i.'Aa') +/i.26),'0123456789+/'
NB. или можно тупо BASE64=: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
tobase64=: 3 : 0
res=. BASE64 {~ #. _6 [\ , (8#2) #: a. i. y
res, (0 2 1 i. 3 | # y) # '='
)
frombase64=: 3 : 0
pad=. _2 >. (y i. '=') - #y
pad }. a. {~ #. _8 [\ , (6#2) #: BASE64 i. y
)
Здравствуйте, Lazy Cjow Rhrr, Вы писали:
LCR>Я с товарищем иду в магазин, там мы затариваемся разной всячиной (он платит), однако некоторые вещи он не будет есть вообще, некоторые будет есть только он, а некоторые мы будем есть пополам. Значит я ему должен: LCR>
Nuzhny,
N>Попробовал — понравилось
N>Раньше у меня в этой роли выстпали Mathcad, Matlab и Maple (в разной последовательности). Там, конечно, всё потяжеловесней. Самым удобным был Mathcad. В остальных постоянно забывались то синтаксис, то функции . Да и платные они все.
Maple мне тоже нравится. Правда с внутренним языком они малость переборщили в том смысле, что язык видимо делался "от сердца", поэтому некоторые фичи не совсем обычные и гхм.. немного кривоватые (ну например, protect-unprotect, evaluation rules). Но это ерунда по сравнению с потрясной библиотекой Maple и тем, что Maple вовсе небесплатный.
Quintanar,
LCR>>Как там с лицензией? А с портом под КПК? Q>А как ты думаешь?
Да риторические были вопросы...
Q>Может интерпретатор напишу, благо мегапроизводительность не нужна.
Ну удачи и успехов
А вот такой вопрос тацит(д?)ное представление оно при изучении J в подкорке откладывается ?
Вернее не в тацитном представлении вопрос. А в том что к чему применяется... И допустим как в тацитной форме отличить глагол в монадной форме от диадной ?
"Если Вы отличаетесь от меня, то это ничуть мне не вредит — Вы делаете меня богаче". Экзюпери
Здравствуйте, Mirrorer, Вы писали:
M>... M>А вот такой вопрос тацит(д?)ное представление оно при изучении J в подкорке откладывается ? M>Вернее не в тацитном представлении вопрос. А в том что к чему применяется... И допустим как в тацитной форме отличить глагол в монадной форме от диадной ?
Да все нормально откладывается. При условии регулярного использования языка. Ну это и для естественного языка справедливо.
Вилка (fork) интуитивно понятна даже новичку. Ну что может быть естественнее чем (+/ % #) для вычисления среднего. Хук (hook) немного сложнее но тоже очень быстро привыкаешь к таким идиомам как фильтрация (#~ predicat). Что касается валентности, то для вилки она соответствует наименьшей валентности составляющих ее глаголов, а хук всегда амбивалентен, так как hook y = y hook y.
Здравствуйте, Lazy Cjow Rhrr, Вы писали:
LCR>Курилка, LCR>Но частенько задачки "на пощщитать" выпадают не такие тривиальные и calc.exe уже не поможет вообще.
powercalc того ms. Может очень много, в тч графики строить и еденицы измерения конвертировать. Функции запоминает и т.д.
Не стыдно попасть в дерьмо, стыдно в нём остаться!
demi,
LCR>>Но частенько задачки "на пощщитать" выпадают не такие тривиальные и calc.exe уже не поможет вообще.
D>powercalc того ms. Может очень много, в тч графики строить и еденицы измерения конвертировать. Функции запоминает и т.д.
Может не очень много Да, действительно, более навороченная по сравнению с обычным calc, но по-прежнему игрушка (power toy ^_^).
Недостатков много:
++ если в J можно работать с любыми вычислимыми функциями, то в кулькуляторе — только с теми, которые являются аналитическими и которые можно записать в одну (:??? строчку.
++ Отсутствует даже элементарная операция округления.
++ Операций с массивами нет (попробуй хотя-бы мой пример с походом в магазин).
++ На первый взгляд конвертеры сделаны достаточно удобно, но копни чуть в глубь и ты увидишь, что коверсии времени не выдерживают никакой критики: вопрос "какой день недели был 5 апреля 1242 года (Ледовое Побоище)" вычислить в этом кулькуляторе черезчур геморно. Для контраста:
dayofweek =: monad define
'y m d' =. y
dii =. (<. @ %)~ NB. inverse integer division (10 dii 33 => 3)
y =. y - a [ a =. 12 dii 14 - m
w1 =. 7 | 12 dii 31 * m + 2 -~ 12 * a
w2 =. d + y + 400 dii 97 * y
7 | <: w1 + w2
)
dayofweek"1 (2007 4 27 ,: 1242 4 5)
4 5 NB. 27 апреля 2007 - пятница, 5 апреля 1242 - суббота
Потом сохраняем эту функцию куда-нибудь в файлик и юзаем когда захочется.
++ REPL никакой.
++ Под покет отсутствует.
Короче, нерасширяемый монолит с довольно-таки средними возможностями.
ps0: Моя критика касается исключительно этого "повер тоя", ничего личного
ps1: использован алгоритм
def dayofweek(year, month, day):
"""Calculate the day of the week (Monday is 0)."""
a = (14 - month) // 12
y = year - a
weekday = (day + y + ((97 * y) // 400)
+ ((31 * (month + (12 * a) -2 )) // 12)) % 7
if weekday == 0:
return 6
else:
return weekday-1