упрощенно, есть список чисел list[double]
хочу расширить до list[double*double] где второй элемент есть максимум от конца первого...
[1,2,3,2,1]
[(1,3)(2,3)(3,3)(2,2)(1,1)]
Циклами понятно как...
и еще TakeWith выдает тип list[Enumerable([double*double*double])], а Map list[double*double*double]
Здравствуйте, Аноним, Вы писали:
А>упрощенно, есть список чисел list[double] А>хочу расширить до list[double*double] где второй элемент есть максимум от конца первого... А>[1,2,3,2,1] А>[(1,3)(2,3)(3,3)(2,2)(1,1)]
А>Циклами понятно как...
А>и еще TakeWith выдает тип list[Enumerable([double*double*double])], а Map list[double*double*double]
def loop(lst, acc)
{
match (lst)
{
| [] => acc.Rev()
| head :: tail => loop(tail, (head, tail.Max()) :: acc)
}
}
def res = loop(lst, [])
Re[2]: Список максимумов
От:
Аноним
Дата:
29.02.12 11:12
Оценка:
Здравствуйте, CodingUnit, Вы писали:
CU>Здравствуйте, Аноним, Вы писали:
А>>упрощенно, есть список чисел list[double] А>>хочу расширить до list[double*double] где второй элемент есть максимум от конца первого... А>>[1,2,3,2,1] А>>[(1,3)(2,3)(3,3)(2,2)(1,1)]
А>>Циклами понятно как...
А>>и еще TakeWith выдает тип list[Enumerable([double*double*double])], а Map list[double*double*double]
Здравствуйте, Аноним, Вы писали:
А>упрощенно, есть список чисел list[double] А>хочу расширить до list[double*double] где второй элемент есть максимум от конца первого... А>[1,2,3,2,1] А>[(1,3)(2,3)(3,3)(2,2)(1,1)]
А>Циклами понятно как...
А>и еще TakeWith выдает тип list[Enumerable([double*double*double])], а Map list[double*double*double]
Здравствуйте, CodingUnit, Вы писали:
CU>Здравствуйте, Аноним, Вы писали:
А>>упрощенно, есть список чисел list[double] А>>хочу расширить до list[double*double] где второй элемент есть максимум от конца первого... А>>[1,2,3,2,1] А>>[(1,3)(2,3)(3,3)(2,2)(1,1)]
А>>Циклами понятно как...
А>>и еще TakeWith выдает тип list[Enumerable([double*double*double])], а Map list[double*double*double]
def loop(lst, acc)
{
match (lst)
{
| [] => acc.Rev()
| head :: tail => loop(tail, (head, tail.Max()) :: acc)
}
}
def res = loop(lst, [])
А>Циклами и я могу... хочется чере map, fold и прочий матан.... (вообще так ли уж надо было его вставлять?)
А Fold не рекурсия ?
public FoldLeft[T, TOut] (l : list [T], mutable acc : TOut, f : T * TOut -> TOut) : TOut {
def loop (_) {
| [] => acc
| x :: xs =>
acc = f (x, acc);
loop (xs)
}
loop (l);
}
public FoldRight[T, TOut] (l : list [T], acc : TOut, f : T * TOut -> TOut) : TOut {
match (l) {
| [] => acc
| x :: xs => f (x, FoldRight (xs, acc, f))
}
}
Здравствуйте, Аноним, Вы писали:
А>упрощенно, есть список чисел list[double] А>хочу расширить до list[double*double] где второй элемент есть максимум от конца первого... А>[1,2,3,2,1] А>[(1,3)(2,3)(3,3)(2,2)(1,1)]
А>Циклами понятно как...
Вот Haskell
f = uncurry zip . (id &&& map maximum . init . tails)
Здравствуйте, VladD2, Вы писали:
VD>Еще надо на К и J для полноты картины. А моно и jpeg-ом его... Не фиг читать что не попадя.
Это все попса. Наш выбор Jot.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[3]: Список максимумов
От:
Аноним
Дата:
02.03.12 06:28
Оценка:
Здравствуйте, VoidEx, Вы писали:
VE>Здравствуйте, VoidEx, Вы писали:
VE>>Здравствуйте, Аноним, Вы писали:
VE>Точнее просто:
VE>
VE>f = uncurry zip . (id &&& map maximum . tails)
VE>
У этого алгоритма не будет случайно n^2 порядок операций?
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, VoidEx, Вы писали:
VE>>Здравствуйте, VoidEx, Вы писали:
VE>>>Здравствуйте, Аноним, Вы писали:
VE>>Точнее просто:
VE>>
VE>>f = uncurry zip . (id &&& map maximum . tails)
VE>>
А>У этого алгоритма не будет случайно n^2 порядок операций?
Ну если скорость не порадует, напишете правило перезаписи на свой maxMaximumTails без изменения кода самой функции.
Здравствуйте, VoidEx, Вы писали:
VE>Здравствуйте, VladD2, Вы писали:
VD>>Здравствуйте, VoidEx, Вы писали:
VE>>>Точнее просто: VE>>>
VE>>>f = uncurry zip . (id &&& map maximum . tails)
VE>>>
VD>>Еще надо на К и J для полноты картины. А моно и jpeg-ом его... Не фиг читать что не попадя.
VE>Зачем K, на нём хоть и непонятно, зато запись короче. Лучше на Nemerle, и кода больше, и без поллитру не разобрать.
если у нас использовать функцию Tails и Maximum то запись получится короче, здесь просто у вас используются встроенные библиотечные функции, а у нас их нет, и кода больше для реализации этих вещей.
Re[5]: Список максимумов
От:
Аноним
Дата:
02.03.12 10:41
Оценка:
Здравствуйте, VoidEx, Вы писали:
VE>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, VoidEx, Вы писали:
VE>>>Здравствуйте, VoidEx, Вы писали:
VE>>>>Здравствуйте, Аноним, Вы писали:
VE>>>Точнее просто:
VE>>>
VE>>>f = uncurry zip . (id &&& map maximum . tails)
VE>>>
А>>У этого алгоритма не будет случайно n^2 порядок операций?
VE>Ну если скорость не порадует, напишете правило перезаписи на свой maxMaximumTails без изменения кода самой функции.
Здравствуйте, CodingUnit, Вы писали:
CU>если у нас использовать функцию Tails и Maximum то запись получится короче, здесь просто у вас используются встроенные библиотечные функции, а у нас их нет, и кода больше для реализации этих вещей.
Да прям уж короче. Семантически будет столько же.
Можно, конечно, и так написать.
x `zip` map maximum (tails x)
А правила перезаписи у вас есть?
Но в общем-то это всё оффтоп и ясное дело, что вопрос в библиотечных функциях. Топикстартер просил через "всякий матан", я и написал, а уж перевести это можно хоть на C++.
Своим постом я лишь хотел показать, какие нужны функции, чтобы выглядело читаемо и понятно.
"список и максимумы хвостов списка"
Здравствуйте, Аноним, Вы писали:
А>тогда это точно длиннее и сложнее чем Немерле....
Любой приведённый здесь вариант на Немерле переводится на Хаскель напрямую. Более того, я вам привёл вариант, при котором код функции остаётся понятным и коротким, а работает так быстро, как вам надо. При этом вы делаете вывод, что это "длиннее и сложнее". Чувствуется религия, поэтому я умываю руки.
Re[7]: Список максимумов
От:
Аноним
Дата:
02.03.12 11:26
Оценка:
Здравствуйте, VoidEx, Вы писали:
VE>Здравствуйте, Аноним, Вы писали:
А>>тогда это точно длиннее и сложнее чем Немерле....
VE>Любой приведённый здесь вариант на Немерле переводится на Хаскель напрямую. Более того, я вам привёл вариант, при котором код функции остаётся понятным и коротким, а работает так быстро, как вам надо. При этом вы делаете вывод, что это "длиннее и сложнее". Чувствуется религия, поэтому я умываю руки.
тут не в религии дело... Если такие преобразования прописаны в библиотеке Хаскеля(переписования), то вариант его намного лучше... Иначе если необходимо писать кусок кода переписывания, то получается и больше и сложнее