Ich benutze J jetzt seit ein paar Monaten und finde, dass das Lesen von unbekanntem Code (z.B. den ich nicht selbst geschrieben habe) einer der schwierigsten Aspekte der Sprache ist, besonders wenn er stillschweigend vorliegt. Nach einer Weile bin ich auf diese Strategie gekommen:
1) Kopieren Sie das Codesegment in ein Word-Dokument
2) Nehmen Sie jeden Operator aus (1) und setzen Sie ihn in eine eigene Zeile, so dass er senkrecht steht
3) Ersetzen Sie jeden Operator durch seine verbale Beschreibung auf der Seite Vokabular
4) Erstellen Sie eine grobe Übersetzung von J-Syntax in englische Grammatik
5) Verwenden Sie die Übersetzung, um konzeptionell zusammenhängende Komponenten zu identifizieren, und trennen Sie sie durch Zeilenumbrüche
6) Beschreiben Sie in einfacher englischer Prosa, was jede Komponente aus (5) tun soll.
7) Schreiben Sie eine Beschreibung dessen, was das gesamte Programm auf der Grundlage von (6) tun soll
8) Erläutern Sie, warum der Code aus (1) das Designkonzept aus (7) repräsentiert.
Obwohl ich dabei viel lerne, finde ich es ziemlich mühsam und zeitaufwändig - vor allem, wenn jemand sein Programm nach einem Konzept entwickelt hat, das ich noch nie gesehen habe. Deshalb frage ich mich: Haben andere in der J-Gemeinschaft Lieblingsmethoden, um obskuren Code zu entschlüsseln? Wenn ja, was sind die Vor- und Nachteile dieser Methoden?
EDIT:
Ein Beispiel für die Art von Code, die ich aufschlüsseln müsste, ist der folgende:
binconv =: +/@ ((|.@(2^i.@#@])) * ]) @ ((3&#.)^:_1)
Ich habe dieses Programm selbst geschrieben, daher weiß ich zufällig, dass es eine numerische Eingabe nimmt, sie als ternäres Array uminterpretiert und das Ergebnis als Darstellung einer Zahl zur Basis 2 mit höchstens einer Verdopplung interpretiert. (z.B. binconv 5 = (3^1)+2*(3^0) -> 1 2 -> (2^1)+2*(2^0) = 4.) Wäre ich jedoch ohne Vorgeschichte oder Dokumentation auf die Funktion gestoßen, wäre es eine nicht ganz einfache Aufgabe, herauszufinden, dass sie genau das tut.