我是Haskell语言的新手,我对read函数有一些问题。 确切地说,我理解:
read "8.2" + 3.8
应该返回12.0因为我们想要返回与第二个成员相同的类型。 我不能真正得到的是为什么:
read "True" || False
回归真实吗?好吧,它返回了与False相同的类型,这是布尔值,但我不明白为什么是第一个成员。我想我有一个模糊的想法,比如,在这种情况下返回函数将返回第一个成员,因为条件是|| ? 请帮帮我。另外,我很抱歉,如果这对你们大多数人来说都是基本的,但我真的想要了解它。
答案 0 :(得分:9)
跟随ghci!
Prelude> let x = read "True"
Prelude> :t x
x :: Read a => a
所以x
没有具体的类型。当我们要求时,x
是一种表达式,可以提供具体类型的值。我们可以要求x
成为Int
或Bool
或我们想要的任何内容。特别是:
Prelude> x :: Bool
True
我们也可以要求它是Int
:
Prelude> x :: Int
*** Exception: Prelude.read: no parse
但它未能成为一个。
因此,在您的代码段中,我们何时会要求它成为某种东西?
Prelude> :t (||)
(||) :: Bool -> Bool -> Bool
函数(||)
需要Bool
,因此它要求其参数成为Bool
。正如我们已经看到的,当我们要求x
成为Bool
时,它会成为Bool
值True
。所以说:
Prelude> x || False
True
就像说:
Prelude> True || False
True
而(||)
代表the logical OR operation,因此结果为True
。
答案 1 :(得分:4)
好True
read "True" && False
它不返回第一个成员,而是返回or-operation
的结果你应该试试
True || _ = True
看到差异
可能是一个轻微的评论/补充:
从某种意义上说,你返回第一个组件的权利 - 只是因为True || undefined
所以即使Prelude> read "True" || undefined
True
也没问题:
sails