auto list = [](auto ...xs) { return [=](auto access) { return access(xs...); }; }; auto head = [](auto xs) { return xs([](auto first, auto ...rest) { return first; }); }; auto tail = [](auto xs) { return xs([](auto first, auto ...rest) { return list(rest...); }); }; auto length = [](auto xs) { return xs([](auto ...z) { return sizeof...(z); }); }; int len = length(list(1, '2', "3")); // 3
5> [1,2,3].map { $1 * 10 } <repl>:5:9: error: type '(($T7, ($T7, $T8) -> ($T7, $T8) -> $T6) -> ($T7, ($T7, $T8) -> $T6) -> $T6, (($T7, $T8) -> ($T7, $T8) -> $T6, $T8) -> (($T7, $T8) -> $T6, $T8) -> $T6)' does not conform to protocol 'IntegerLiteralConvertible' 6> let x = [1,2,3] x: [Int] = 3 values { [0] = 1 [1] = 2 [2] = 3 } 7> x.map { $1 * 10 } <REPL>:8:7: error: 'Int' is not a subtype of '(($T5, ($T5, $T6) -> ($T5, $T6) -> $T4) -> ($T5, ($T5, $T6) -> $T4) -> $T4, (($T5, $T6) -> ($T5, $T6) -> $T4, $T6) -> (($T5, $T6) -> $T4, $T6) -> $T4)' x.map { $1 } и эти люди ругают С++ за сообщения об ошибках... inb4, правильный код -- x.map { $0 * 10 }
Есть ли какой-то someMagic, чтобы переписать a = b >=> b >=> b >=> b в виде a = someMagic 4 b
решил "потягать штангу" на задачке от maxim@lj получился кусок такого веселого кода solve7x2 deck = match2 deck >>= match2 >>= match2 >>= match2 >>= match2 >>= match2 >>= match2 solve554 deck = match5 deck >>= match5 >>= match4 solve5333 deck = match5 deck >>= match3 >>= match3 >>= match3 solve4433 deck = match4 deck >>= match4 >>= match3 >>= match3 match? :: Deck -> [Deck], если чё.
Разработчики openSUSE -- <нехорошее слово>. Есть программа, назовем ее abc, плагины к которой на других системах находятся в /usr/lib/abc (c погрешностью до /usr/lib64/abc или /usr/lib/x86_64-linux-gnu/abc). В сусе эти плагины лежат в /usr/lib64/libabc-1_0. PS. Project Owner пофиксил мой код (беру из `ldd abc` путь к libabc.so, к нему добавляю "/abc"), заменив на другой костыль: вызов abc с несуществующим плагином и парсинг пути из сообщения об ошибке.
код из тестового: class Base { public: virtual ~Base() {} virtual void print(std::ostream &) const = 0; }; typedef Base * PBase; class Derived { public: Derived(int data) { this->data = data; } virtual ~Derived() {} virtual void print(std::ostream & s) { s << data; } private: int data; }; void print_it(std::ostream & s, Base * p) { p->print(s); } int main() { print_it(std::cout, PBase(new Derived(5))); } Если бы не отсутствие const у Derived::print, я бы и не заметил...
enum OldError { E_OK, E_WTF }; enum class Error { OK, WTF }; int main() { if (OldError e = E_WTF) // компилируется printf("!"); if (Error e = Error::WTF) // нет printf("!"); }
Еще один вариант "типизированных" коллекций в Objective C #define NSArray_(T) NSArray #define NSDictionary_(K,V) NSDictionary NSArray_(NSString) * strings = … NSDictionary_(NSString,NSString) * dict = …
Типизированные коллекции в Objective C NSArray/*<NSString*>*/ * strings = ... NSDictionary/*<NSString*,NSString*>*/ * dict = ...