Как стать автором
Обновить

Комментарии 24

Спасибо за статью, многое стало понятным. И все-же… Это эзотерический язык программирования, по крайней мере для меня.ццц
Простите за сарказм, но

(]%[**:@>:@])[:^[:-%~
(] % [ * *:@>:@]) [: ^ [: - %~

О да. Стало ГОРАЗДО понятнее :)

А если серьезно, какие есть причины вообще писать на J, а не на чем-нибудь другом?
О да. Стало ГОРАЗДО понятнее :)
Да, было довольно трудно найти подходящий пример :) Вообще, правила хорошо работают все скопом, а не по отдельности.

А если серьезно, какие есть причины вообще писать на J, а не на чем-нибудь другом?
Да хоть бы и for fun. На брейнфаке же пишут.
Ну разве что for fun :)
Я писал не just for fun. Тут дело далеко не только в синтаксисе, а в высоком уровне операций над векторами. А краткость конструкций позвоняет не отвлекаться от самого написания.
А прочесть потом смогли? :)
Легко!… если конечно не через 6 месяцев, на протяжении которых не трогал J. Но в основном по причине, что словарь забывается быстрее чем в других языках, но думаю он просто не успел достаточно прочно осесть в голове/на пальцах. После восстановления словаря — читается хорошо.

В J, как и в любом языке, большинство конструкций довольно простые, просто люди удивляются типа как же это так записано без слов, но на самом деле ничего такого нет. Потом открывается масса других достоинств, но к синтаксису они имеют мало отношения.
Лично меня просто пугают слишком краткие записи. Что J, что Хаскель, что Перл — их как-то очень тяжело проговаривать про себя, слишком мало слов.
Не понимаю. Неужели вам удобнее воспринять:
sum=0; foreach i in L { sum+=i }; return sum ?

чем

+/ L NB. / это over или foldr

?
sum(L)

Люблю Питон :)
Тем более.

sum =: +/
sum(L)

Просто через какое-то время нужда в мнемониках отпадает, и +/ воспринимается ничуть не хуже.
Ни в коем случае не отрицаю :) Вопрос в поддержке кода кем-то другим…
Через неделю-две чтения JforC по вечерам вполне можно читать и понимать код на J не хуже, чем код на любом другом языке, хоть и не без периодического подглядывания в словарик.
Более корректное сравнение с Python:

from functools import reduce
from operator import add

reduce(add, L, 0)

Исходя из опыта разработки DSL могу сказать, что нужда в мнемониках не отпадает. Наоборот, на реальном оборудовании выясняется, что сложение может быть знаковым/беззнаковым, с разным округлением и разным контролем переполнения, деление может быть целочисленным и обычным и т. д. И вообще есть много бинарных операторов, попытка обозначить которые приведёт к неоднозначным результатам. Например, при перемножении векторов идёт покомпонентное перемножение или традиционное векторное произведение? А при перемножении множеств?
Исходя из опыта разработки DSL могу сказать, что нужда в мнемониках не отпадает. Наоборот, на реальном оборудовании выясняется, что сложение может быть знаковым/беззнаковым, с разным округлением и разным контролем переполнения, деление может быть целочисленным и обычным и т. д.
Я, может, не совсем понял, но это уже будут не мнемоники, а вполне себе собственные глаголы вроде <.@%. Под мнемониками я имею в виду именно оборачивание примитива в глагол (+/, конечно, не примитив)
Не знаю, как вы, но я код проговариваю про себя, когда читаю. Соответственно, «плюс слеш эл энбэ точка» звучит как клинопись какая-то.
Может, дело привычки, но порог вхождения в такой язык сильно повышается.
NB. — это начало комментария.

так что просто +/L
но проговаривать можно + over L. так как для APL'а,K и думаю J есть переводчики синтаксиса в слова — только они не особо нужны тем кто начал писать.
Для Code golf, например.
Да, Perl и правда курит в сторонке, он позволяет писать какой угодно код, хоть запутанный, хоть самодокументированный, в отличии от. Тем не менне, с автором статьи согласен, эти правила никому не мешали.
И всё-таки, писать самодокументирующийся код можно, но усилий это обычно не стоит:
logistic =: verb define
  s =: x
  x =: y

  (exp (- x % s)) % (s * sqr (1 + exp (- x % s))) return.
)

normal =: verb define
  x =: y

  (exp (- (sqr (x)) % 2)) % (sqrt (2 * pi)) return.
)
Lisp — это программирование безглазыми смайликами ))))
Мне одному кажется, что данный язык программирования серьезно увеличивает энтропию ?!
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории