Каковы некоторые из уникальных особенностей J?

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

3 ответа

Решение

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

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

(+/ % #)

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

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

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

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

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

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

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

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

var1 =: 10

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

var2 =: 4 8 15 16 23 42

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

var2 % 3.7

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

Другие вопросы по тегам