未定义Haskell中的部分列表?

use*_*057 5 haskell list

undefinedHaskell的部分列表吗?

我知道这[1,2:undefined]是局部的,但undefined仅此一点呢?

mhw*_*bat 12

undefined是一个函数,如果您尝试评估它会导致错误.(但是,如果你不试图评估它,它没有坏处.)让我们检查类型签名undefined:

ghci> :t undefined
undefined :: a
Run Code Online (Sandbox Code Playgroud)

a是一种类型的变量,并且由于不存在在式签名识别约束(出现类型约束之间::=>符号),a可以是任何类型.

我不确定:你的例子中是否真的想要一个.

[1,2,undefined]是一个整数列表,因此undefined该表达式中的类型也是一个整数.

(1:2:undefined)也是一个整数列表,但是:将列表作为其第二个参数,因此undefined该表达式中的类型是整数列表.

我认为没有[1,2:undefined]道理.1是一个整数,但是2:undefined是一个整数列表.您不能拥有包含不同类型元素的列表.


编辑:

undefined不是真正的部分列表*,它只是一个值(可以是任何类型,包括列表).例如,[1,2,undefined]是一个包含三个元素的列表.第一个元素是1,第二个元素是2,第三个元素不能被评估 - 但它是一个整数.

*但是,undefined作为最后一个元素的列表可用于表示某种"部分列表",只要您无法评估该元素.(我认为这就是@Daniel的意思).但是,如果它之前或之后有元素,您可以评估它们.例如:

ghci> last [1,2,undefined,4]
4
Run Code Online (Sandbox Code Playgroud)

编辑#2:

另一个例子可能有帮助 在这里,我创建了一个包含四个元素的列表,其中一个是(c)undefined.当我查询ghci以找出其类型时c,我发现它只是一个整数,而不是列表.

ghci> let (a:b:c:d) = [1,2,undefined,4]
ghci> :type c
c :: Integer
Run Code Online (Sandbox Code Playgroud)