我正在努力通過Write Yourself a Scheme in 48 Hours的練習。我需要簡化幾個函數的幫助。哈斯克爾 - 請幫我簡化這兩個功能
data LispVal = Number Integer
| String String
| Bool Bool
isNumber :: [LispVal] -> LispVal
isNumber [] = Bool False
isNumber [(Number _)] = Bool True
isNumber ((Number _):xs) = isNumber xs
isNumber _ = Bool False
isString :: [LispVal] -> LispVal
isString [] = Bool False
isString [(String _)] = Bool True
isString ((String _):xs) = isString xs
isString _ = Bool False
的isNumber
和isString
功能有很多共同的結構。我如何去分解這個共同的結構?
模式匹配無法移動和因式分解。所以字符串和數字文字必須寫在「現場」。我不確定你想要做什麼,但是你也許可以實現一個'typeOf :: [LispVal] - > LispType'函數,它可以一次模式匹配表達式並返回它的類型。 – 2012-04-15 20:38:49
您可以移除第一個案例(空列表),因爲它也是由最後一個模式捕獲的。 – 2012-04-15 21:02:17