Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Чему будет равно значение переменной $c после выполнения следующего кода:
$c = ($a == $b || $a <= 2) ? ($a == 2) ? 1 : 2 : ($b > $a && $a > 2) ? ($b > 2) ? 3 : 4 : ($a < 5 || $b < 2) ? ($b == 4) ? 5 : 6 : (1 == 1) ? 7 : 8;
Если отформатировать, то получим:
- if(true) then if (false) then 5 else 6 else if (true) then 7 else 8
- if(true)
- then
- if (false)
- then 5
- else 6
- else
- if (true)
- then 7
- else 8
(true ? (false ? 5 : 6) : true) ? 7 : 8
if
(if true
then
if false then 5 else 6
else true)
then 7
else 8
(true ? (false ? true : false) : true) ? 7 : 8true || false ? 5 : 10 должно превратиться вtrue || if false then 5 else 10, а это не так, по крайней мере в Си++. Так что «интуитивная» замена bool? на if bool then не работает, а если брать в кач-ве bool всё выражение, то разборов может быть уже два.
infixl 0 ?
True ? (x, _) = x
False ? (_, x) = x
infixl 1 ?:
(?:) :: a -> a -> (a, a)
x ?: y = (x, y)
main = print x where x = True ? 5 ?: 6
mov ax, 0и
xor ax, axслыхали?
Особенности влияния изучения нескольких языков программирования