LINUX.ORG.RU
Ответ на: комментарий от Pi

Тогда чем отличется:

x = 1:2:3:[]

и

x = [1] ++ [2] ++ [3] ++ []

Можете дать какой-нить пример, который бы иллюстировал эту разительную разницу? А то у меня пока каша в голове.

Valdemard
() автор топика
Ответ на: комментарий от Valdemard

Prelude> :info (:)
data [] a = ... | a : [a] -- Defined in GHC.Types
infixr 5 :
Prelude> :info (++)
(++) :: [a] -> [a] -> [a] -- Defined in GHC.Base
infixr 5 ++

Prelude> :t (:)
(:) :: a -> [a] -> [a]
Prelude> :t (++)
(++) :: [a] -> [a] -> [a]

sf ★★★
()
Ответ на: комментарий от Valdemard

в первом случае у тебя список, в голове (head) которого 1, а в хвосте (tail) находится список, в голове которого 2, а в хвосте находится список, в голове которого находится 3, а хвост представляет пустой список

а во втором случае у тебя конкатенация списка, состоящего из единственного элемента 1, со списком, состоящим из элемента 2, со списком, состоящим из элемента 3. при том пустой список в конце не нужен.

Pi ★★★★★
()
Ответ на: комментарий от Valdemard

А этого мало?

21:19:33 < trofi> @src (++)
21:19:33 < lambdabot> [] ++ ys = ys
21:19:33 < lambdabot> (x:xs) ++ ys = x : (xs ++ ys)
21:19:33 < lambdabot> -- OR
21:19:33 < lambdabot> xs ++ ys = foldr (:) ys xs

sf ★★★
()
Ответ на: комментарий от Valdemard

: участвует в механизме итерации по спискам

Pi ★★★★★
()

(++) для списков определен в терминах (:).

Но (++) - базовая операция, которую можно определить для разных типов данных. А (:) - конструктор списка.

imp ★★
()

Господа, спасибо, понял.

Valdemard
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.