2010-07-10 2 views
4

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

+2

Он может выиграть [код-гольф] (http://stackoverflow.com/questions/tagged/code-golf) s легко: p – kennytm

+2

Должна быть wiki сообщества? –

ответ

6

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

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

(+/ % #)

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

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

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

5

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

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

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

+0

K? http://en.wikipedia.org/wiki/K_programming_language –

+2

В чем разница между молчаливым стилем в J (который, как я полагаю, является тем, что делает его языком не-фон Неймана) и говорит о стиле без слов в Haskell, языках стека как значок и фактор, или конвейеры команд оболочки Unix? Существует много других языков, где переменные имен считаются плохим. –

+0

Jean Sammet зарегистрировал более 1000 языков программирования еще в середине 70-х годов, при условии, что он не был рассчитан на программирование, если он не использовался не менее чем двумя людьми, кроме изобретателя. Думаю, это довольно круто. –

2

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

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

var1 =: 10 

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

var2 =: 4 8 15 16 23 42 

Выполнено. О, но подождите, вам нужно разделить это на 3.7? Не связывайтесь с литьем, просто пойти на это:

var2 % 3.7 

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

+0

Разве эта функция не распространена на многих языках, которые предлагают арифметику на основе вектора (например, Matlab, R, Python + Numpy)? – hatmatrix

+0

Я тоже так думаю. Это не совсем уникально, но это интересная функция. – MPelletier