我確實有以下代碼:
suffixes :: [a] -> [[a]]
suffixes [] = [[]]
suffixes l@(_:t) = l : suffixes t
prefixes :: [a] -> [[a]]
prefixes [] = [[]]
prefixes l@x = l : prefixes (init x)
menu :: Char -> [a] -> Either String [[a]]
menu 'p' l = Right (prefixes l)
menu 's' l = Right (suffixes l)
menu x _ = Left ("(" show x ")" "is not supported, use (p)refix or (s)uffix")
我確實有以下測驗功能:
testMenuP = "Expected Right [[1,2],[1],[]]; menu 'p' [1,2] returned " show (menu 'p' [1,2] :: Either String [[Int]])
testMenuS = "Expected Right [[1,2],[2],[]]; menu 's' [1,2] returned " show (menu 's' [1,2] :: Either String [[Int]])
testMenuC = "Expected Left \"(d) is not supported, use (p)refix or (s)uffix\"; menu 'd' [1,2] returned " show (menu 'd' [1,2] :: Either String [[Int]])
testMenu = putStr (testMenuP "\n" testMenuS "\n" testMenuC "\n")
我現在的問題是,當我輸出字串時,如何去掉 Char 'd' 中的引號 ''(如測驗函式 testMenuC 中所示)。
uj5u.com熱心網友回復:
您可以將選單部分替換為:
menu x _ = Left ("(" [x] ")" "is not supported, use (p)refix or (s)uffix")
甚至
menu x _ = Left . mconcat $ ["(", [x], ")", "is not supported, use (p)refix or (s)uffix"]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/339382.html
