2014-01-26 3 views
-2

Мне нужно написать функцию для объединения двух списков. Точно как '++' работает.Собственная функция Haskell для объединения двух списков

let x = merge [1,2,3] [3,3,4] -- should output [1,2,3,3,3,4] 

Как это сделать?

Edit: решение

merge :: [a] -> [a] -> [a] 
merge []  ys = ys 
merge (x:xs) ys = x : (merge xs ys) 
+0

Может быть, это? http://stackoverflow.com/a/3938449/1423473 – erthalion

+0

@erthalion Нет, это несортированная интерполяция. Это слияние сортирует или объединяет, и я думаю, что они просят конкатенации. –

+0

erthalion, это не то, что я ищу, как говорят куски. – user3235761

ответ

1

Может быть что-то вроде этого.

merge :: (a -> a -> Bool) -> [a] -> [a] -> [a] 
merge pred xs []   = xs 
merge pred [] ys   = ys 
merge pred (x:xs) (y:ys) = 
    case pred x y of 
    True -> x: merge pred xs (y:ys) 
    False -> y: merge pred (x:xs) ys 

(++) xs ys = merge (\x y -> compare x y == LT) xs ys 

Или, если вам просто нужно повторить функциональность (++), вы можете посмотреть, что это определение с hoogle, который в конечном итоге приводит вас к source code

(++) []  ys = ys 
(++) (x:xs) ys = x : xs ++ ys 
Смежные вопросы