2013-10-01 58 views
1

这是我的任务字符串连接函数是低于和低于这是我需要帮助的功能。haskell语言连接

type Language = [String] 
strcat :: String -> String -> String 
strcat [] y  = y 
strcat (x:xs) y = x:(strcat xs y) 

concat_lang :: Language -> Language -> Language 
concat_lang [] y = y 
concat_lang x [] = x 
concat_lang (x:xs) (y:ys) = (strcat x y):(concat_lang (x:xs) ys) 

这是我的输入到concat_lang:concat_lang [ “一个”, “B”, “C”] [ “d”, “E”, “F”]

我想要输出到[ad,ae,af,bd,be,bf,cd,ce,cf]

请帮忙!!

+1

提示:使用列表理解和('++'或'concat')。 – Satvik

+1

你差不多了。你的'strcat'是正确的,但是'concat_lang'有问题 - 它永远不会移动到'xs'中的下一个字符。你需要更多提示吗? –

回答

1

列表理解,使生活变得更轻松

lang xs ys = [x:y:[] | x <- xs , y <- ys] 

lang是多态的,如果这是不可取的,只需添加一个类型签名。

0
combinations :: [a] -> [b] -> [(a,b)] 
combinations xs ys = concatMap (flip zip ys . repeat) xs 


type Language = [String] 

concat_lang :: Language -> Language -> Language 
concat_lang xs ys = map f $ combinations xs ys 
    where 
     f (x,y) = x ++ y 

使用

concat_lang ["a","b","c"] ["d","e","f"] 

得到

["ad","ae","af","bd","be","bf","cd","ce","cf"] 
0

concat_lang xs ys = [x ++ y | X < - XS,Y < - YS]

0

经典的例子,应用型仿函数就可以派上用场:

>> import Control.Applicative 
>> (++) <$> ["a", "b", "c"] <*> ["d", "e", "f"] 
    ["ad","ae","af","bd","be","bf","cd","ce","cf"] 
>> 

你一定要看看这个Aplicative函子...