Haskell 来自哈斯克尔
我在将可能列表转换为字符串列表时遇到问题 我的清单是这样的:[没有,只有3,只有9,没有,没有] 我想用点('.')替换所有的Nothing,用“Int”替换所有的Just Int 到目前为止,我的解决方案不起作用Haskell 来自哈斯克尔,haskell,Haskell,我在将可能列表转换为字符串列表时遇到问题 我的清单是这样的:[没有,只有3,只有9,没有,没有] 我想用点('.')替换所有的Nothing,用“Int”替换所有的Just Int 到目前为止,我的解决方案不起作用 [if c == Nothing then c = '.' else show (fromJust c) | c <- [Nothing, Just 3.... etc] ] [如果c==Nothing,那么c='.'其他显示(仅从c)| c使用数据中的maybe。mayb
[if c == Nothing then c = '.' else show (fromJust c) | c <- [Nothing, Just 3.... etc] ]
[如果c==Nothing,那么c='.'其他显示(仅从c)| c使用数据中的maybe
。maybe
import Data.Maybe
test = [Nothing, Just 3, Just 9, Nothing, Nothing]
f :: Show a => [Maybe a] -> [String]
f = map (maybe "." show)
您的问题是,您试图使用列表理解来修改列表中的元素,方法是执行c='.
。这是Haskell,因此您从不修改任何内容!(除了STRef
或IORef
,但我们不必修改)
您可以执行以下操作:
[if c == Nothing then '.' else show (fromJust c) | c <- [Nothing, Just 3.... etc] ]
你应该去做,或者你可以去做
map (maybe "." show) [...whatever...]
无论哪一种,你都会喜欢。(嗯,后者更清楚。)在命名上吹毛求疵,但这在Haskell中是一件重要的事情:类型的种类。可能有种类*->*
,所以永远不可能有一个“可能的列表”,对于一些a
,只有可能的列表。你的例子[Nothing,Just 3,Just 9,Nothing,Nothing]
将是Num a=>[可能是a]
,或者可能是[Int]
。但这与您的问题没有什么关系。此外,如果您愿意,您可以使用catMaybes:[可能是a]>[a]根据数据。也许。这只会给你留下整数,没有其他。这不是你在追求什么,但可能是其他人发现你的问题在追求什么。
[if c == Nothing then '.' else show (fromJust c) | c <- [Nothing, Just 3.... etc] ]
[maybe "." show c | c <- [...whatever...] ]
map (maybe "." show) [...whatever...]