
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.21] |
![]() |
|
Страницы: (56) « Первая ... 8 9 [10] 11 12 ... 55 56 ( Перейти к последнему сообщению ) |
Сообщ.
#136
,
|
|
|
Рекурсивно определение шаблона. Но не определения функций, порождаемых этим шаблоном. |
Сообщ.
#137
,
|
|
|
![]() ![]() bool isOneOf2(A, ARGS...)(A a, ARGS bb) { if(a == bb[0]) return true; static if(bb.length > 1) return isOneOf2(a, bb[1..$]); else return false; } vs ![]() ![]() template<typename T, typename U> bool isOneOf(T a, U b) { return a == b; } template<typename T, typename U, typename ... Args> bool isOneOf(T a, U b, Args ... args) { return isOneOf(a, b) || isOneOf(a, args...); } Для меня второй вариант проще ![]() Цитата пришлось городить отдельную вспомогательную функцию, как я и думал. Почему вспомогательную? Это функция, которая берет два аргумента разных типов и сравнивает их ![]() |
Сообщ.
#138
,
|
|
|
Иногда оно проще в реализации. С точки зрения эффективности разницы никакой.
|
Сообщ.
#139
,
|
|
|
Цитата MyNameIsIgor @ Рекурсивно определение шаблона. Но не определения функций, порождаемых этим шаблоном. Ага. А в D второй вариант вырождается именно в рекурсивные функции? |
Сообщ.
#140
,
|
|
|
Цитата D_KEY @ А в D второй вариант вырождается именно в рекурсивные функции? Насколько я знаю, нет, тоже итеративный, не дженерики же ![]() ![]() |
![]() |
Сообщ.
#141
,
|
|
Цитата applegame @ Не понимаю, к чему это? DMD, кстати компилирует гораздо быстрее GCC. Одна из фишек D - быстрая компиляция. Там опечатка, поправил. Возможность сделать код непонятным? Кстати, как там с коллизией имен? Если внутри find уже будет переменная с именами «a» или «b» такого же типа, что и твои параметры? Цитата applegame @ Оно, задача была проста. Но теперь сравниваем код, для D и для C++ и смотрим, что наглядней, легче для понимания и проще в написании. Конечно хаскелл и CL: ![]() ![]() isOneOf1 _ [] = False isOneOf1 x (y:ys) = x == y || isOneOf1 x ys ![]() ![]() (defmacro is-one-of (fn x &rest ys) (find x ys :test fn)) ![]() Добавлено Цитата applegame @ Зачем? Это разве входило в условия задачи? Динамически только значения можно передавать. А длина и типы зафиксированы compile-time. Ну так не интересно. |
Сообщ.
#142
,
|
|
|
Цитата korvin @ Конечно хаскелл Только это другая задача ![]() Добавлено Я вот совсем не знаю template haskell. Там никак во время компиляции не сделать? |
Сообщ.
#143
,
|
|
|
Цитата D_KEY @ В debug-режиме, как правило да, как и в GCC например. В release оно разворачивает рекурсию, естественно. Я прекрасно знаю, что такое хвостовая рекурсия. Ага. А в D второй вариант вырождается именно в рекурсивные функции? |
Сообщ.
#144
,
|
|
|
Цитата D_KEY @ Для меня второй вариант проще Хотя тут разницы-то нет. Ну да, он же там три строчки то съэкономил, пожалел места ![]() |
![]() |
Сообщ.
#145
,
|
|
Цитата D_KEY @ Я вот совсем не знаю template haskell. Там никак во время компиляции не сделать? Там много чего можно, это ж вроде почти как макросы CL, только типизированные. Т.е. наверное правильней сказать «как в Nemerle». Только в чем сакральный смысл? Часто ты таким образом сравниваешь значения? Обычно, если их довольно много, то это рантайм-коллекция и всё придется делать в рантайме, а если мало, то овчинка выделки не стоит, обход массива в пяток значений просто копеечен по стоимости. |
Сообщ.
#146
,
|
|
|
Цитата MyNameIsIgor @ Ошибаешься. Посему тебе, лично - до свидания, не скучай Просто applegame не до конца понимают семантику того кода, который сам и написал ![]() ![]() |
Сообщ.
#147
,
|
|
|
Цитата applegame @ В debug-режиме, как правило да, как и в GCC например Какая может быть рекурсия, если вызывается другая функция? ![]() Цитата applegame @ В release оно разворачивает рекурсию Не разворачивает рекурсию, а инлайнит вызовы других функций. Цитата applegame @ Я прекрасно знаю, что такое хвостовая рекурсия. Серьёзно? Я не заметил... |
Сообщ.
#148
,
|
|
|
Цитата Wound @ Дык это только начало. Ну да, он же там три строчки то съэкономил, пожалел места ![]() ![]() |
Сообщ.
#149
,
|
|
|
Цитата applegame @ Цитата MyNameIsIgor @ Ошибаешься. Посему тебе, лично - до свидания, не скучай Просто applegame не до конца понимают семантику того кода, который сам и написал ![]() ![]() Рано прощаешься, похоже, что он прав ![]() Добавлено Цитата MyNameIsIgor @ Цитата applegame @ Я прекрасно знаю, что такое хвостовая рекурсия. Серьёзно? Я не заметил... Господа, при чем тут вообще хвостовая рекурсия сейчас? Давайте лучше холивар продолжим. |
Сообщ.
#150
,
|
|
|
Цитата korvin @ Ты о каких a и b. Вот этих?Кстати, как там с коллизией имен? Если внутри find уже будет переменная с именами «a» или «b» такого же типа, что и твои параметры? ![]() ![]() find!((a, b) => a.key == b)(foo, 1); |