Если еще условия с APL?
Итак, я задаюсь вопросом / спрашиваю; Можно ли сделать If-Statement в APL? Если так, как?
Вот мой код
'Please enter a number to count to: '
number ←⎕
⍳number
Как получить оператор if, где, если пользователь введет число свыше 100, он выведет "слишком высоко" и завершит; или если это 100 или ниже, то это просто будет продолжаться?
Спасибо!
4 ответа
В Dyalog APL у вас есть эта аккуратная штука под названием охранники.
Они могут использоваться в dfns и оценивать код при совпадении определенного условия.
func ← {⍵>100 : 'too high' ⋄ 1 : 'number is ok'}
Если ваш APL поддерживает управляющие структуры, это должно работать:
∇ generateAll number
:If number>100
⎕←'Too high'
:else
⎕←⍳ number
:endif
∇
Если он НЕ поддерживает управляющие структуры (например, APL2), вам необходимо выполнить ветвление:
∇ generateAll number
→(number>100)/error
⎕←⍳ number
→0
error:
⎕←'Too high'
∇
Вы также можете использовать такие трюки, как execute, но это менее читабельно.
"Классический" способ обработки ошибок * в APL2 - это ⎕ES или ⎕EA. Ваш код будет выглядеть примерно так:
⎕ES(NUMBER>100)/'Too high'
⍳NUMBER
Здесь происходит то, что ЕСЛИ скобки оценивают как истинные, ТОГДА ⎕ES
остановит выполнение и отобразит строку в кавычках.
Если вы не хотите, чтобы ваше ТО закончилось, посмотрите на ⎕EA
в некоторой документации APL.
Обратите внимание, что я на APL2 в среде GreenOnBlack, так что, вероятно, есть более изящные способы сделать это на более современном диалекте, таком как Dyalog.
* Я знаю, что вы спрашиваете об условностях, а не об обработке ошибок, но так как ваш пример завершает выполнение, это также может быть обработка ошибок.
Между этим и тем, что предлагает MBaas, есть существенная разница: его решение будет корректно выходить из текущей функции, которая может возвращать значение. С помощью ⎕ES
или же ⎕EA
с прекратить все выполнение.
Зависит от используемого вами диалекта. Некоторые APL-реализации поддерживают структуры управления, поэтому вы можете написать что-то вроде
:If number>100
⎕←'Too high'
→0
:endif
⍳number
В "традиционных APL" вы, вероятно, сделали бы что-то вроде
⍎(number>100)/'⎕←''Too high'' ⋄ →0'
⍳number