2015-10-28 83 views
0

如何獲得這段代碼以接受字符串列表並在外部輸出框架。我理解這個概念,但不能在最終幀函數中執行代碼。如何在haskell中的字符串列表中傳遞字符串

minusdots :: Int -> String 
minusdots 1 = "-." 
minusdots n 
    | n > 1  = "-." ++ (minusdots (n-1)) 
    | otherwise = error "please enter greater than 1" 


bar :: Int -> String 
bar n 
    | even n = minusdots (div n 2) 
    | otherwise = (minusdots (div n 2)) ++ ['-'] 


frame :: [String] -> IO String 
frame text = map putStrLn (bar m) ++ "\n" ++ textshown ++ "\n" ++ (bar m) 
    where 
    textshown = "- " ++ text ++ " -" 
    m   = length textshown 

我已經在這個一整天的工作,並提出了這一點,但還是有一些錯誤,我需要找出1.當我通過邊境串入frameM功能,如果我是通過說「SS 「有沒有什麼辦法可以讓S的框架在彼此之上,並排放置,所以我把更多的字母放入第一個參數中,框架的總周長就越大?繼承人我做了什麼:

minusdots :: Int -> String -> String 
minusdots 1 a = a 
minusdots n a 
    | n > 1  = a ++ (minusdots (n-1) a) 
    | otherwise = error "argument not addmissible" 


bar :: String -> Int -> String 
bar s n 
    | even n = minusdots (div n 2) s 
    | otherwise = (minusdots (div n 2) s) ++ s 


frameM :: String -> String -> String 
frameM a text = (bar a m) ++ "\n" ++ textshown ++ "\n" ++ (bar a m) 
    where 
    textshown = b ++ text ++ b 
    m   = length textshown 
    b   = a 
+8

你的幾個同學也在爲這個任務而努力。你應該可以跟你的老師談談。 – dfeuer

+2

就像其他人一樣,你有一個奇怪的縮進問題......這是在線練習嗎? – Carsten

+0

是的,當你不知道如何和同時感到沮喪時,很難,但我會問,但我懷疑我會得到幫助,因爲它很難1。 – symon

回答

1

相信類型的frame應該是frame :: String -> IO() - 它需要一個字符串把它的「陷害」版本stdout。那麼你不需要map putStrLn,只能使用putStrLn

現在,考慮這條線:

putStrLn (bar m) ++ "\n" ++ textshown ++ "\n" ++ (bar m) 

您呼叫putStrLn (bar m),然後嘗試一些東西附加到的這個結果(提示:使用括號或$)。

相關問題