Я использую J в течение нескольких месяцев, и я обнаружил, что чтение незнакомого кода (например, я не писал сам) является одним из самых сложных аспектов языка, особенно когда он скрыт. Через некоторое время я придумал эту стратегию:
1) Скопируйте сегмент кода в текстовый документ
2) Возьмите каждый оператор из (1) и поместите его на отдельной строке, чтобы он читал по вертикали
3) Замените каждого оператора своим словесным описанием на странице "Словарь"
4) Сделайте грубый перевод из синтаксиса J в грамматику английского языка
5) Используйте перевод, чтобы идентифицировать концептуально связанные компоненты и разделить их на разрывы строк
6) Напишите описание того, что должен делать каждый компонент из (5), в простой английской прозе
7) Напишите описание того, что должна делать вся программа, на основе (6)
8) Напишите объяснение того, почему код из (1) можно назвать представляющим концепцию дизайна из (7).
Хотя я многому учусь из этого процесса, я считаю, что он довольно тяжелый и трудоемкий - особенно если кто-то разработал свою программу, используя концепцию, с которой я никогда не сталкивался. Поэтому я задаюсь вопросом: есть ли у других людей в сообществе J любимые способы выяснить скрытый код? Если да, то каковы преимущества и недостатки этих методов?
ИЗМЕНИТЬ:
Примером такого кода, который мне нужно было бы сломать, является следующее:
binconv =: +/@ ((|[email protected](2^[email protected]#@])) * ]) @ ((3&#.)^:_1)
Я сам написал это, поэтому я знаю, что он принимает числовой ввод, переинтерпретирует его как тройной массив и интерпретирует результат как представление числа в базе-2 с максимальным удвоением. (например, binconv 5 = (3 ^ 1) + 2 * (3 ^ 0) → 1 2 → (2 ^ 1) + 2 * (2 ^ 0) = 4.) Но если бы я наткнулся на него без любая предыдущая история или документация, выясняя, что это то, что она делает, было бы нетривиальным упражнением.