Продолжения строки в APL
Есть ли в APL символ продолжения строки, т. Е. Символ, который указывает, что ввод еще не завершен и продолжает анализ следующей строки?
Причина, по которой я хочу, состоит в том, чтобы вводить массив в формате, аналогичном его форме, например вместо:
Forecast ← 4 6 ⍴ 150 200 100 80 80 80 300 330 360 400 500 520 100 250 350 380 400 450 50 120 220 300 320 350
Я хотел бы написать (где \
является гипотетическим продолжением символа):
Forecast ← 4 6 ⍴ \
150 200 100 80 80 80 \
300 330 360 400 500 520 \
100 250 350 380 400 450 \
50 120 220 300 320 350
Я использую GNU APL, если это важно, и я почти полный новичок, поэтому прошу прощения, если я просто еще не видел его.
3 ответа
Нет, в любой современной версии APL, о которой я знаю, нет ничего лучше символа продолжения строки.
Но у вас есть точка зрения - визуальная точность определения массивов важна, но она никогда не решалась на уровне языка.
Я бы наверное сделал
Forecast ← 4 6 ⍴ 150 200 100 80 80 80, 300 330 360 400 500 520, 100 250 350 380 400 450, 50 120 220 300 320 350
или же
Forecast ← 0 ⍴ 0
Forecast ← Forecast, 150 200 100 80 80 80
Forecast ← Forecast, 300 330 360 400 500 520
Forecast ← Forecast, 100 250 350 380 400 450
Forecast ← Forecast, 50 120 220 300 320 350
Forecast ← 4 6 ⍴ Forecast
когда явное форматирование было необходимо.
Несколько лет назад некоторые версии APL позволяли вам вводить строки символов со встроенными символами возврата каретки в функции, просто не вводя завершающую кавычку, пока вы не закончили. Эта функция имела аналогичный эффект, но только для строк и только для одной функциональной строки. В конечном итоге он был удален из IBM APL и Sharp APL, возможно, многих других. Возможно, это сбивало с толку пользователей, которые застряли в том, что казалось циклом ввода, или, возможно, собственный редактор del не смог обработать такие строки впоследствии.
В GNU APL (и, возможно, в других версиях) вы можете использовать следующий синтаксис:
A ← ⊃⍎¨⎕INP 'END'
1 0 0
0 1 0
0 0 1
'END'
С уважением
MiServer Dyalog использует отличную команду, которая позволяет разработчику включать JS-код, который необходим как часть страницы в код APL, через функцию "ScriptFollows", которая просто сканирует строки, следующие за этим утверждением, и возвращает весь текст из следующего сегмента. постоянно комментируемых строк. Эта идея также может быть (ab-) использована, чтобы помочь с вашим запросом:
∇ foo
⍝ required functions need to be in the WS or can be defined here:
dtlb←{⍵{((∨\⍵)∧⌽∨\⌽⍵)/⍺}' '≠⍵} ⍝ delete trailing blanks
ScriptFollows←{{∊{'⍝'=⊃⍵:'' ⋄ ' ',dtlb ⍵}¨1↓¨⍵/⍨∧\'⍝'=⊃¨⍵}dtlb¨(1+2⊃⎕LC)↓⎕NR 2⊃⎕SI}
⍝ end of initialization...
⍝ and then could just write:
arr←4 4⍴2⊃⎕VFI ScriptFollows ⍬
⍝ 1 2 3 4
⍝ 5 6 7 8
⍝ 9 10 11 12
⍝ 13 14 15 16
∇
Недостаток: Rho массива нужно указывать независимо от данных, поэтому, когда вам нужно редактировать данные, вам придется редактировать в двух местах. Кроме этого, я должен сказать, что я действительно влюбился в это ScriptFollows
- штучка;-)