2013-10-01 57 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函子...