LINUX.ORG.RU

Отсутствие некоторых конструкций в языках.

 


0

1

Недавно решил попробовать APL и столкнулся с тем, что в версии языка 1 и 2 отсутствует условный оператор (IF). Есть только оператор безусловного перехода и, соответсвенно, довольно забавные варианты реализации ветвления. Покажу на следующем примере вычисления четности/нечетности.

        ∇BOOL←ODD INT
[1]     P←⌈INT÷2
[2]     Q←⌊INT÷2
[3]     →(6 4)[1-P=Q] ⍝ здесь и происходит безусловный переход на 6 либо 4 строку. 
[4]     BOOL←1
[5]     →0
[6]     BOOL←0
        ∇

// квадратные скобки для наглядности

Собственно хотел поинтересоваться - отсутствие каких привычных конструкций и возможностей вы встречали в языках программирования и как с этим справлялись?



Последнее исправление: rikardoac (всего исправлений: 4)

Ответ на: комментарий от buddhist

Обычно - да. Но начать работать в стиле APL достаточно трудно (особенно для того, кто в основном работает с императивными языками). Поэтому и рождаются решения.

rikardoac
() автор топика
Ответ на: комментарий от rikardoac

Собственно хотел поинтересоваться - отсутствие каких привычных конструкций и возможностей вы встречали в языках программирования и как с этим справлялись?

Изучаю способы абстракции в языке (функции, макросы).

ados ★★★★★
()
Ответ на: комментарий от Virtuos86

Ты видел обычный код на APL? Там просто список команд, применяемый к спискам/массивам. Функции выстраиваются так, что ненужные результаты отбрасываются (путем подставления 0), а принимающая функция соответсвенно их отбрасывает. Это только один из примеров, бывают и более изощренные конструкции.

Пример expand (\) - http://www.microapl.co.uk/apl_help/ch_020_020_860.htm

rikardoac
() автор топика
Ответ на: комментарий от rikardoac

Ты видел обычный код на APL?

Видел примеры. Счастья мне это не принесло (. Но теперь немного понимаю, спасибо.

Virtuos86 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.