列表或元组元组的列表

Ais*_*tis 3 haskell tuples

我只是想知道是否有可能创建一个返回(希望是无限的)数字列表的函数.[1,[2,[3,[4]]]].

我得到的最接近的是这个.

func list 0 = list
func list num = func newList (num-1) 
                where newList = list ++ [[num]]
Run Code Online (Sandbox Code Playgroud)

这是用这样的.

func [] 3
Run Code Online (Sandbox Code Playgroud)

哪个回来了.

[[3],[2],[1]]
Run Code Online (Sandbox Code Playgroud)

现在我知道这不是无限的,也不是正确的顺序,但我只是想表明我至少在发布之前尝试了一些东西.:)

谢谢你!

Fed*_*ini 8

您不能编写这样的函数,因为列表的所有元素必须具有相同的类型.即使仅有两个元素,您要创建的列表也不会进行类型检查:

Prelude> :t [1::Int,[2::Int]]

<interactive>:1:9:
    Couldn't match expected type `Int' with actual type `[Int]'
    In the expression: [2 :: Int]
    In the expression: [1 :: Int, [2 :: Int]]
Run Code Online (Sandbox Code Playgroud)

第一个元素是Int,第二个元素是Int列表,因此类型检查失败.

虽然你可以用元组表达结果,例如

Prelude> :t (1::Int,(2::Int,(3::Int,4::Int)))
(1::Int,(2::Int,(3::Int,4::Int))) :: (Int, (Int, (Int, Int)))
Run Code Online (Sandbox Code Playgroud)

您仍然无法编写该函数,因为结果的类型将根据您希望拥有的元素数量而改变.我们称之为f假设函数:

f 1 :: (Int)
f 2 :: (Int,(Int))
f 3 :: (Int,(Int,(Int)))
...
Run Code Online (Sandbox Code Playgroud)

f随参数的变化类型,所以f无法写入.