【发布时间】:2012-03-18 05:11:05
【问题描述】:
我是 Haskell(以及一般的函数式编程)的新手,想知道如何访问我使用 cons添加到列表中的新元素> (:) 运算符?
例如,使用 WinGHCi 创建一个新列表并访问第一个元素:
ghci> let a = [1,2,3]
ghci> a!!0
1
提示返回1,第一个元素的值,cool。现在我将一个新值附加到列表的前面并尝试访问它:
ghci> 5:a
[5,1,2,3]
ghci> a!!0
1
看起来列表项没有被重新索引。我试图让一个负索引工作和其他类似的事情,但编译器似乎没有批准。我正在阅读的教程只是跳过它,我在网上找不到任何有用的东西。如何从列表中获取值“5”?
感谢您的帮助,如果这是一个非常基本的问题,我们深表歉意。
【问题讨论】:
-
为了说明 Marcin 的观点,在 GHCI 中输入“a”,您将看到 [1,2,3],因为您无法在 Haskell 中修改变量。为了澄清事情,请考虑these definitions of variable and assignable:Haskell 在数学意义上具有“变量”,但没有命令式语言中的“可赋值”。
-
a 在 5:a 之后仍然是 [1,2,3]。Thera 没有像函数式编程中的突变这样的副作用
-
是的,我现在明白了,这完全是另一种想法……哈哈。谢谢大家!
-
Haskell 有不可变的数据。变量不存在 - 只有名称为变量的静态值存在。这确实是一个关于 Haskell 中基本概念的非常基本的问题。
标签: list haskell functional-programming winghci