Продолжения строки в 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- штучка;-)

Другие вопросы по тегам