2013-08-23 71 views
1

有誰知道在Haskell方式的東西轉化形式轉換的字母列表到Word(和刪除語音標記)

["w","o","r","d"] 

word 

我剛剛完成我的第一個程序(一個RSA加密),目前的輸出非常難看。我很抱歉,如果這是一個非常愚蠢的問題,但我真的不知道如何去做。此外,爲了讓我輸入輕鬆了很多,沒有人知道的方式轉換

word 

[w,o,r,d] 

回答

10

即使您從來沒有聽說過「concat」,下面介紹如何解決這類問題。讓我們來找出什麼類型你有:

λ> :t ["w","o","r","d"] 
["w","o","r","d"] :: [[Char]] 

OK,所以這是的Char小號列表的列表。

現在,讓我們找出你想要的類型:

λ> :t "word" 
"word" :: [Char] 

因此,我們要的是轉換的Char小號名單列表的Char■簡單列表功能。換句話說,我們需要一個簽名爲[[Char]] -> [Char]的函數。讓我們使用Hoogle搜索具有該類型簽名*的函數。這樣做,列表中的第四項功能是:

concat :: [[a]] -> [a] 
base Prelude, base Data.List 
Concatenate a list of lists. 

這正是我們想要的。

  • 更棒的是,您可能已經意識到我們需要的操作可以使用任何類型的列表進行操作。然後,您將搜索類型簽名[[a]] -> [a]。 (這種見解帶有實踐意義。)當我剛纔那樣做時,concat是第一個結果。
+0

我無法投票回覆您的回覆,因爲我的聲譽不夠高,但非常感謝您,我現在就馬上申請。 – Michael

+0

這可能是一個非常愚蠢的問題,但我現在如何應用您給我的操作? – Michael

+0

排序它,然後 – Michael

5

檢查類型:

Prelude> let s = ["w","o","r","d"] 
Prelude> :t s 
s :: [[Char]] 

所以,你可以把它當作字符列表的列表。

什麼函數「flattens」列出? CONCAT:

Prelude> :t concat s 
concat s :: [Char] 

所以這就是我們的字符串,我們用putStrLn

Prelude> putStrLn $ concat s 
word 
1

看CONCAT打印。你有一個字符列表的列表。扁平化這是一種常見模式,concat是實現它的工具。也就是說,如果你正在學習,你可能會自己動手。

2

正如其他人所說,concat是將[[Char]]轉換爲[Char]的方法,至於換個方式,您有兩種選擇。您可以將您的字符串"word"當作Char的列表(請記住,它的類型是String,它只是[Char]的別名),只是在Char s而不是String s上運行,或者您可以將每個單個字符轉換爲單字符String。我推薦前者,但我會演示另一個。

最簡單的方法是使用非常簡單的列表理解。所有你需要做的就是從這個單詞中得到每個字母,並將它包裝在[]中,以使它成爲一個列表。由於String = [Char],您將該單詞的每個字母作爲String

splitUpWord :: String -> [String] 
splitUpWord word = [[letter] | letter <- word] 
+1

謝謝,我的聲望還不足以投票回答你的答案,但在排序完第一部分問題之後,我會繼續努力:) – Michael

+0

另一種(更習慣的)做法它會是'splitUpWord = map(:[])'。 – kqr

+1

@kqr這是我的第一個解決方案,但我爲了user2710971的緣故而清晰起見。 – bheklilr

相關問題