Каковы некоторые из уникальных особенностей J? - PullRequest
4 голосов
/ 10 июля 2010

Я происходил из C, Fortran, Python, R, Matlab и некоторых Lisp - и прочитал несколько вещей на Haskell. Какие изящные идеи / примеры на J или других языках из семейства APL являются уникальными и не реализованы на более распространенных языках? Мне всегда интересно узнать, чего мне не хватает ...

Ответы [ 3 ]

6 голосов
/ 14 июля 2010

J имеет очень большой набор операторов, которые облегчают запуск сложных программ без необходимости искать библиотеку. Он обладает чрезвычайно мощными возможностями обработки массивов, а также итеративными конструкциями, которые делают явные управляющие структуры несущественными для большинства целей - настолько, что я предпочитаю использовать тензорную алгебру вместо объявления явного цикла, поскольку это более удобно. J работает в интерпретаторе, но хороший J-скрипт может быть таким же быстрым, как и программа, написанная на языке компилятора. (Когда вы вынимаете явные циклы, интерпретатору не нужно компилировать содержимое цикла каждый раз, когда он выполняется.)

Еще одна забавная особенность J - молчаливое программирование. Вы можете создавать сценарии без явной ссылки на входные переменные, что позволяет выражать идею исключительно в терминах того, что вы собираетесь делать. Например, я мог бы определить функцию усреднения как «суммирование терминов в списке и деление их на количество записей в списке» следующим образом:

(+/ % #)

или я мог бы создать скрипт, который нарезал бы на 2D-массив и возвращал только средние значения строк, у которых среднее было больше 10:

(10&<#])(+/%#)"1

Есть много других интересных вещей, которые вы можете сделать с J; это исполняемая форма математической записи. Идеи легко обобщаются, поэтому вы получаете много пользы от изучения любого аспекта работы языка.

5 голосов
/ 10 июля 2010

Я думаю, что один из самых интересных аспектов J заключается в том, что это один из очень немногих языков, не относящихся к фон Нейману, который даже удаленно мейнстрим.

Хм.J мейнстрим?Ну да, по сравнению с другими не-Нейманными языками это так!Существует только очень мало языков, отличных от фон Неймана, большинство из которых живут только в какой-то диссертации и никогда не были реализованы, а те, которые были реализованы , обычно имеют пользовательскую базуиз 1, если даже это.Как правило, они считаются успешными, если хотя бы один из пользователей не сидит на том же этаже, что и парень, который его изобрел.

По сравнению с , что , J равно мейнстрим.В частности, J основан на FP Джона Бэкуса из его оригинальной лекции по премии Тьюринга « Может ли программирование быть освобождено от стиля фон Неймана? », и это AFAIK единственная работающая реализация этого.(Я не думаю, что Backus когда-либо фактически реализовывал FP, например.)

2 голосов
/ 01 августа 2010

Возможно, это не так уникально, как я представляю, но главная особенность, которую я могу придумать для J, - неявная типизация. Он создает этот хороший уровень абстракции над выполнением и управлением памятью, чтобы сосредоточиться на обрабатываемых данных.

Предположим, вам нужно сохранить номер:

var1 =: 10

И это сделано. Массив?

var2 =: 4 8 15 16 23 42

Готово. О, но подождите, вам нужно разделить это на 3,7? Не беспокойтесь о кастинге, просто сделайте это:

var2 % 3.7

Избавление от необходимости создавать, манипулировать и распределять - крошечное благословение.

...