2015-07-12 3 views
3

Есть ли символ продолжения строки в 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, если это важно, и я почти полный новичок, так что извинения, если я просто не видел еще.

ответ

5

Нет, нет ничего похожего на символ продолжения строки в любой современной версии 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 не смог обработать такие строки впоследствии.

2

С GNU APL (и, возможно, других версий), вы можете использовать следующий синтаксис:

A ← ⊃⍎¨⎕INP 'END' 
    1 0 0 
    0 1 0 
    0 0 1 
'END' 

С уважением

2

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 массива должно быть указано independtly данных, поэтому, когда вам нужно изменить данные, вы должны будете редактировать в двух местах. Кроме этого, я должен сказать, что я действительно влюбился в это ScriptFollows -Stuff ;-)

+0

История продолжается ;-) Подробнее здесь: http://www.dyalog.com/forum/viewtopic.php? F = 34 & T = 880 – MBaas

Смежные вопросы