LINUX.ORG.RU

История изменений

Исправление pseudo-cat, (текущая версия) :

Или я тебя как-то не так понял?

я не понял вот это:

iterate f a = [a, f a, f (f a), f (f (f a)),...]

Таким образом, если мы сделаем iterate (map next . filter test) seq (знак $ тут не обязателен, стоит для красоты — он означает просто применение функции к аргументу, но со специальным приоритетом), то получим список, элементами которого будут списки: сначала — сам seq, затем — то, что из него получается, если отфильтровать и применить next, затем — то, что получается из этого той же операцией, и так далее.

то есть a - это начальная последовательность, f a - это последовательность после применения к каждому элементу next и так далее. То есть f имеет тип seq -> seq? Тогда я вроде могу написать так -

// pseudo code
data = [7; 1; 5; 4; 10]
next x =
    filter (nx -> |x - nx| <= 3.0) data
//--- 
intervalSortedSeq = concat $ takeWhile (not . null) $ iterate  next $ [0]

// sortedSeq : [0] @ [1] @ [4] @ [5, 7] @ [10] = [0 1 4 5 7]

И откуда у тебя взялось nx?

это аргумент анонимной функции

(nx -> |x - nx| <= 3.0)

Исходная версия pseudo-cat, :

Или я тебя как-то не так понял?

я не понял вот это:

iterate f a = [a, f a, f (f a), f (f (f a)),...]

Таким образом, если мы сделаем iterate (map next . filter test) seq (знак $ тут не обязателен, стоит для красоты — он означает просто применение функции к аргументу, но со специальным приоритетом), то получим список, элементами которого будут списки: сначала — сам seq, затем — то, что из него получается, если отфильтровать и применить next, затем — то, что получается из этого той же операцией, и так далее.

то есть a - это начальная последовательность, f a - это последовательность после применения к каждому элементу next и так далее. То есть f имеет тип seq -> seq? Тогда я вроде могу написать так -

// pseudo code data = [7; 1; 5; 4; 10] next x = filter (nx -> |x - nx| <= 3.0) data //--- intervalSortedSeq = concat $ takeWhile (not . null) $ iterate next $ [0]

// sortedSeq : [0] @ [1] @ [4] @ [5, 7] @ [10] = [0 1 4 5 7]

И откуда у тебя взялось nx?

это аргумент анонимной функции

(nx -> |x - nx| <= 3.0)