IIF - Immediate IF (qpile и lua)
Тернарный оператор - постоянно используемое мной очень простое расширение языка QPILE.
Чтобы каждый раз не выписывать конструкции типа
if size > 0 oper = "Buy" else oper = "Sell" end if
и ей подобные, написал элементарный макрос, который делает такие вещи за меня.
QPILE
Предыдущий фрагмент с использованием этого макроса теперь выглядит так:
IIf(size > 0,oper,"Buy","Sell")
Сам макрос на языке препроцессора M4 задаётся так:
define(`IIf',`ifelse(m4_is_variable($2),False,m4_error(Second parameter in IIF must be variable name),$#,4,`if $1
$2 = $3
else
$2 = $4
end if',`m4_error(IIF syntax: IIF(`condition',`variable',`truevalue',`falsevalue'))')')
Таким образом, макрос проверяет, чтобы второй параметр, переданный ему был переменной (а не выражением или чем-нибудь еще. Это делает макрос m4_is_variable). Если число параметров не равно 4, также выдаётся диагностика с допустимым синтаксисом (это делает макрос m4_error).
define(`m4_is_variable',`ifelse(regexp($1,`[^a-zA-Z0-9_]'),-1,True,False)')
LUA
Тут совсем просто.
define(`iif',`((`$1') and (`$2') or (`$3'))')