
В прошлой главе мы разобрались с синтаксисом функций. В этой главе мы познакомимся с системой типов языка.
Список глав
От Lisp до Haskell
Agda is too mainstream!
constexpr
. С помощью него можно создавать переменные, функции и даже объекты, которые будут рассчитаны на этапе компиляции. Это удобно, ведь раньше для таких целей приходилось использовать шаблоны. Но тут все не так просто. У тех, кто не так хорошо знаком с constexpr
, может сложиться впечатление, что теперь не будет никаких проблем с расчетами на этапе компиляции. Но на constexpr
-выражения наложены серьезные ограничения.constexpr
, о том, какие будут изменения в стандарте C++14, а во второй части будет пример использования constexpr
: библиотека, которая считает результат математического выражения в строке.constexpr auto x = "(4^2-9)/8+2/3"_solve;
std::cout << "Answer is " << x;
Answer is 37/24
auto Identity = [](auto x) {
return x;
};
Identity(3); // 3
[ [3,2,1].reduce(Math.pow), [].reduce(Math.pow) ]
[9, 0]
[9, NaN]
[9, undefined]
reduce
с чисто практической точки зрения.reduce
(reduce
с академической точки зрения).reduce
.Жесть! Это как программирование через регулярные выражения…
Нет, вы меня не заставите! Больше никогда!
Смотрю на код и чувствую себя идиотом. Это правда не эзотерический язык типа brainfuck? Им кто-то реально пользуется? И эти программы потом читают?
Хабрахабр о JPerl нервно курит в сторонке.quicksort=: (($:@(<#[), (=#[), $:@(>#[)) ({~ ?@#)) ^: (1<#)
((]i.~[:{.[){([:{:[),]`([:<[$:[:>])@.([:32&=[:3!:0[:>]))"2 0
даже тренированный мозг сворачивается в трубочку.value =: [:(]`{.@.([:1&=#))[:,[:>[((([:<[)=[:{.])#[:{:])[:>]
не может быть понятен человеку, незнакомому хотя бы со словарём языка.