【发布时间】:2014-04-02 04:22:00
【问题描述】:
我在玩 .bmp 图像和 ascii 艺术,遇到了关于模式匹配和元组递归的问题。
该函数需要简单地将单词列表转换为整数。同时携带高度和宽度不变。我的尝试:
convertToIntegers :: ([GHC.Word.Word8], Integer, Integer) -> ([Integer], Integer, Integer)
convertToIntegers ([], x, y) = ([], x, y)
convertToIntegers ((a:as), x, y) = ( toInteger a : convertToIntegers (as, x, y), x, y)
显然,这不起作用并返回类型错误:
Couldn't match expected type `[Integer]' with actual type `([Integer], Integer, Integer)'
In the return type of a call of `convertToIntegers'
In the second argument of `(:)', namely `convertToIntegers (as, x, y)'
In the expression: toInteger a : convertToIntegers (as, x, y)
看起来应该很简单,我可以通过拆分它并使用辅助函数来完成它。为了弄清楚这一点,我尝试了以下方法:
convertToIntegers :: ([GHC.Word.Word8], Int, Int) -> [Integer]
convertToIntegers ([], x, y) = []
convertToIntegers ((a:as), x, y) = toInteger a : convertToIntegers (as, x, y)
这很好用。所以问题是我根本不知道如何在操作其中的列表时返回单个元组。真是烦死我了,谁能帮忙?
【问题讨论】: