bytebuster463 (
bytebuster463) wrote2012-07-18 05:40 pm
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Entry tags:
Вы ещё не изучаете функциональное программирование?
Тогда вот вам няшка как раз уровня песочницы.
Это исходник кода сортировки. В одну строчку. Без вызова внешних функций. Правда, на Хацкеле. Отсюда.
Это исходник кода сортировки. В одну строчку. Без вызова внешних функций. Правда, на Хацкеле. Отсюда.
qsort1 s = case s of {[] -> []; (x:xs) -> qsort1 [y | y<-xs, y<x] ++ x : qsort1 [y | y<-xs, y>=x]}
Ну или вот тоже красивый, но с вызовом filter.qsort2 :: Ord a => [a] -> [a]
qsort2 [] = []
qsort2 (p:xs) = (qsort2 lesser) ++ [p] ++ (sort2 greater)
where
lesser = filter (< p) xs
greater = filter (>= p) xs
Третий - через partition, тоже ничево.qsort3 [] = []
qsort3 (p:xs) = (qsort3 lesser) ++ [p] ++ (qsort3 greater)
where (lesser, greater) = partition (< p) xs
Давайте, напишите мне то же самое на сях.
no subject
no subject
no subject
Слава, это спортивное программирование, типа как диггера решать. в крайнем случае системное или низкоуровневое - имеет очень узкое применение.
Прикладное - это когда sort(s)
С помощью прикладного можно реать миллион интересных задач, это инстурментарий. С помощью спортивного - только играться, как в шахматы ) хотя никто не спорит что это прикольно и лаконично! вопросов нет. как задачка для поразмыслить субботним вечером сидя в кресле в саду :)
Я лично ненавижу програмирование. Поэтому пишу так
layout:{
"nicegraph":{"type":"graph","source":"api/mygraphobject"},
"nicetable":{"type":"table","source":"api/my555"}}
и оно мне рисует расписной скрин, который растиягвается и работает во всех устройствах и браузерах, c красивым графом (с дефолтными настройками все, конешно), который можно крутить ов все стороны, и табличкой, которую сразу можно редактировать, добавлять, сортировать, группировать, экспортировать, оно сразу приязано к базе через апи, к экспортным фильтрам и тп.
как именно оно там внутрях это делает - я написал один раз и надеюсь когда нибудь забуду нахер :)
no subject
"Узкое применение": посмотри, например, вот это (http://websharper.com/samples/TogglePanel). Там HTML+AJAX, и всё это со строгой типизацией. Оно тупо не скомпилируется, если кривое!
"nicegraph": Ты пытаешься путать зелёное и сладкое. Nicegraph - это библиотечная штука. Её кто-то уже написал, как и sort. Ни на каком языке программирования их никто не переписывает, они уже есть.
Так что когда показывают самолёт, не надо говорить, что в "Запорожце" есть модный набалдашничек на переключателе передач. Набалдашничек и в самолёте есть. ;)
no subject
no subject
Ты сравниваешь реализацию и внешний интерфейс? Так у моих программ (у всех!) внешний интерфейс вообще без параметров:
main();
ЗдОрово, правда? :)
В постинге писалось не о том, как выглядит интерфейс метода sort, а о том, как написать ему потроха. Без или с минимальным использованием библиотек.
no subject
Правильно.
1st class functions и лямбды придумали уроды.
Clojures придумали извращенцы.
Функциональный анализ (ветвь алгебры), все эти множества функций над множествами функций придумали шепелявые старухи (вспоминаю свою преподшу из книвера).
А за комбинатор неподвижной точки в приличном обществе можно в морду схлопотать! :)))
no subject
no subject
no subject
Я лишь привожу стандартный ответ на этот qsort, вон ниже его уже воспроизвели. А на ФП я пару собак съел, если что, даже в fprog.ru автором числился, в истинную веру меня обращать не нужно.
no subject
Так у меня было! :)))
В веру обращать не буду, уже договорились :)
Но мы оба одинаково понимаем тематику? Никто не собирается переписывать библиотеки. Но в качестве упражнения для ума, сортировку писать нужно. Равно как ханойские башни и волк-коза-капуста. Чисто для причёсывания мыслей в голове.
А почему Хацкеля синтаксис смешнее? Я на ём не писал, но синтаксис читабельный, имхо.
no subject
no subject
Я не силён в философии ФП (пока что), но мне кажется так...
Тем не менее, вопрос в силе: причём здесь синтаксис? :)
no subject
А синтаксис при том, что если пытаться делать сортировку быстро, а не просто красиво, то отличия от Си будут в основном синтаксическими.
no subject
qsort1 s = case s of {[] -> []; (x:xs) -> qsort1 [y | y<-xs, y<x] ++ x : qsort1 [y | y<-xs, y>=x]}
и каждый раз, когда вижу, мне хочется форматнуть человеку бердан. Какой, к свиням, qsort?! Скорость настоящего алгоритма QuickSort (сокращённо qsort) пропорциональна Nlog2N, дополнительные затраты памяти - ноль. А о скорости и ресурсоёмкости этого уебанства даже говорить смешно.
Просто уберите буковку q, и тогда я Вас прощу :)
no subject
Давайте, Вы меня лучше простите за то, что Вы сами ни с того, ни с сего, решили, что qsort = quick sort? :)
qsort - это чтобы не конфликтовало со стандартными методами! ;))
ЗЫ. Почему двоичный логарифм? Натуральный же?
no subject
man qsort
qsort - это чтобы не конфликтовало со стандартными методами
Как раз qsort - стандартная функция и стандартное сокращение. Пруф - http://ru.wikipedia.org/wiki/qsort . А насчёт конфликтов - где это Вы видели библиотечные функции/методы с названиями sort1, sort2 и sort3?
Почему двоичный логарифм? Натуральный же?
Попытался представить себе алгоритм, скорость которого была бы пропорциональна натуральному логарифму от объёма данных. Не смог.
no subject
Первенького назвали qsort.
Когда появился второй, пришлось первенького переименовать, чтобы со вторым было созвучно.
А про логарифм - спасибо, почитаю, какой он на самом деле.
no subject
no subject
К моему стыду, чтобы логарифмы перевести, тоже придётся гуглить. Вот честно, никогда не пользовался ими уже почти 20 лет (трясу седыми мудями, да).
no subject
no subject