Кто-либо рекомендовал бы изучить J/K/APL? [закрытый]

Возврат внутрь .forEach ничего не делает, либо помещает данные в массив, чтобы использовать их позже, либо возвращает метод .map вместо этого.

Вот пример, если вам нужно использовать .forEach, как в вашем вопросе. .

{
const products = [];
Object.keys(flags).forEach(product => {
  products.push (
    <>
        <input
            type='checkbox'
            className='form-checkbox'
            name={product}
            value={product}
            onChange={this.gatherFormData}
        />
        <span className='label'>{product}</span>
    </>
  );
})
return products;
}
44
задан ozan 14 April 2009 в 13:44
поделиться

8 ответов

Тысячи лет назад я был программистом APL. Я имею в виду тысячи назад в 70 s, когда пользовательский набор символов означал, что у нас были специальные печатные терминалы с клавиатурой и набором символов APL, а также селекционные шарики IBM со специальными символами и т. д.

Я пошел на лекцию Кена Айверсона "Почему APL был крут".

Его тезис был таким. Давным-давно разделение было серьезным математическим начинанием, предназначенным для аспирантов. Для обозначения таких вещей, как повторение десятичных разложений, использовалась большая куча математической символики. Когда-то даже что-то вроде «отрицательного» числа требовалось тщательно продуманная запись.

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

Цель APL (и J и K) - обобщить большие алгоритмы в аккуратную запись.

В настоящее время я программист на Python. Я обнаружил, что мое раннее воздействие APL исказило мой мозг, заставив меня спросить "что это значит?" и "это многоразовая операция?" и "что такое содержательное резюме для всего этого алгоритмического пуха?"

Кроме того, когда я продолжаю Project Euler решать проблемы "функционального программирования" Python, подкрепленные моими "пропитанными джином воспоминаниями о APL" оба очень полезны при выполнении упражнений.

54
ответ дан S.Lott 26 November 2019 в 21:39
поделиться

Я думаю, что ваши 3 балла показывают, что вам НЕ НУЖНО учить J. Однако я не могу думать о любая ситуация, когда изучение нового языка вредно.

Уделение времени изучению того, что вас интересует (или любого нового языка), всегда улучшает ваши другие навыки программирования. Вы изучаете различные подходы к проблемам, которые, возможно, сможете реализовать по-разному на других языках.

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

9
ответ дан Inisheer 26 November 2019 в 21:39
поделиться

Во времена эльдаров я был разработчиком языка APL, кодировал на ассемблере 370. Я портировал J на ​​OS2, но так и не научился использовать его для реальной работы. В настоящее время я работаю на Java и PHP и оцениваю Python. После первых трех разделов учебника по Python я был поражен множеством сходств, которые он имел с APL, что и привело меня сюда.

Я настоятельно рекомендую изучить APL или J в качестве интеллектуального упражнения. Это изменит ваше представление о программировании (исказит ваш мозг) и, вероятно, поможет вашему программированию на Python. Также есть несколько рабочих мест для программистов APL и J, и, вероятно, программистов меньше, чем рабочих мест.

8
ответ дан 26 November 2019 в 21:39
поделиться

Я работал программистом APL несколько лет назад, в 1970-х. Мне нравится этот язык, но я не использовал его годами.

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

Он отлично подходит для статистики. и матричные операции. Задачу программирования лайнера можно решить тремя символами. Намного легче доказать правильность этой реализации LP, чем той, которая, например, берет страницы на языке C.

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

7
ответ дан 26 November 2019 в 21:39
поделиться

Я зарабатываю на жизнь APL с 1980 года. Я с нетерпением жду возможности продолжать заниматься этим еще несколько лет. Использование APL - это не только большое удовольствие, но и отличные функции отладки. Современные реализации - это полноценные функциональные языки, а также объектно-ориентированные языки.

За эти годы я встречал много людей, которые спрашивали меня, как долго, я думаю, я смогу продолжить работу с APL. Это были dbase, PL / 1, ALGOL, Pascal, Forth, C, Focus и другие программисты. Понятно ?!

14
ответ дан 26 November 2019 в 21:39
поделиться

j немного похоже на Genie: оно должно быть сохранено внутри бутылки. Поддержание большого количества пакетного программного обеспечения в J - серьезная боль. Поддержание интерфейсов (Windows или Web на основе, потому что да, вы можете настроить j, чтобы ответить на Apache для создания веб-вывода) в J - экспериментальный, малоизвестный круг ада.

С другой стороны, использование J в порядке, если вы хотите: разбираться, просеять, проанализировать, хруст и т. Д. Некоторые данные, чтобы возиться с ним, чтобы выяснить мелкое зерно алгоритма, или произвести впечатление на Интернет с максимально возможным способом рассчитать, сколько треугольников вписывается в круг или что нет.

Я пришел очень близко к добавлению j в качестве выключателя сделки на моем профиле карьеры на Careers.StackoverFlow.com , но я в конечном итоге оставил это. Для меня, используя J в порядке, производит j, однако, нет.

Редактировать:

Это было некоторое время назад. Я до сих пор думаю плохо от полных решений в производстве (то есть все ваш MVC). Поскольку исходный ответ, я использовал j в качестве COM в проекте C #, где J предоставляется большой матрицей, которая будет неудовлетворена для управления в C #, с большим удовлетворением.

Часть нашей работы - сделать моделями данных и код . Это не легко преодолеть это качество и очень разбрасывать синтаксис J j. Несколько рамки, в отличие от j, имеют простой в работе - с IDE и имеют достаточную поддержку, чтобы позволить одному устроить код по-человечески читаемому способу. J's Über-Matrix возможности не компенсируют то, что ему не хватает.

13
ответ дан 26 November 2019 в 21:39
поделиться

Я работал в J и APL в большинстве последних 25 лет и может тщательно рекомендовать оба. Я все еще вернулся к тому или другому, когда у меня есть любой форма анализа Ad-HOC, и я также использовал его в проекте EULER.

Если вы заинтересованы в Project Euler, то J, безусловно, один на выбор. Его поддержка бесконечных точных целых чисел и простых числах делает его очень хорошим.

16
ответ дан 26 November 2019 в 21:39
поделиться

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

С учетом этого, причина, по которой я оставляю его для личного использования на работе, заключается в том, что (1) никто другой на работе не использует его, (2) кривая обучения достаточно крута, так что мне нецелесообразно просить коллег освоить его, и (3) тот факт, что вы можете строить замысловатые программы в одной строке кода, делает сложным чтение строки кода, особенно если вы не писали его сами. (Я рассчитываю потратить не менее получаса на изучение строки кода, в которой используется десять или более операторов, если только они не были использованы таким образом, что я хорошо понимаю лежащие в их основе принципы).

Некоторые примеры интересных возможностей J:

1) Любую функцию, определенную для работы с одним числом, можно заставить работать с массивами произвольного ранга. Например:

NB. totient(n) = n * \prod_{p|n} (1 - 1/p)
totient=: * -.@%@~.&.q:

NB. Finding the totient of 10
totient 10

NB. Finding the totient of all numbers from 1 to 10
totient"0 (1+i.10)

Это точно такая же функция, только оперирующая атомами (одноэлементными компонентами) входного массива 1xN. Аналогично, вы можете взять функцию, определенную для работы с массивами (матрицами) ранга два, и применить ее к любому массиву более высокого ранга, просто используя связку "(rank)".

2) Вы можете взять практически любую теоретически инвертируемую функцию в J и инвертировать ее путем "итерации назад". Например,

NB. Converts an array of binary digits to a decimal number
(#.) 1 0 1
5

NB. Converts a decimal number to an array of binary digits
(#.^:_1) 5
1 0 1
17
ответ дан 26 November 2019 в 21:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: