【问题标题】:Haskell, list will not save variables?Haskell,list不会保存变量吗?
【发布时间】:2016-04-21 14:45:50
【问题描述】:

我遇到了一个小问题,我对 Haskell 很陌生,我不明白为什么添加 20 后列表为空。

*Main> list
[]
*Main> add_element
[20]
*Main> list
[]
*Main> 

我的代码:

list = []

add_element = list++[20]

【问题讨论】:

标签: list haskell


【解决方案1】:

在 Haskell 中,变量是不可变的。在你的情况下:

list = []

您定义了一个空列表。

add_element = list ++ [20]

add_element 符号不是一个改变 list 的函数。它实际上是一个由空列表(list)和单例列表[20]组合而成的新列表。

顶级定义list 永远不会是[] 之外的任何东西。

【讨论】:

    【解决方案2】:

    Haskell 中的值是不可变的。您的代码只是为list 定义了一个永远不会改变的空列表值。

    add_element 是一个表示list 的值,其末尾附加了整数值 20。它没有,它不能更改list 的值。

    查看intro Haskell guides 以了解不变性的含义。

    【讨论】:

    • 我认为函数是一个带有箭头类型a -> b 的值。根据该定义,add_element 不是函数。
    • 感谢您添加教程链接!
    • 在 Haskell 中没有“零参数的函数”这样的东西,并且“值”和“函数”不是相互排斥的:例如,lambdas 值。另见:“Everything is a function” in Haskell?(剧透:否)。
    • 感谢您对价值与功能的澄清!我已经更新了答案
    • @AntalSpector-Zabusky:也许更准确地说 Haskell 没有像 arity 这样的概念。它只有值,其中一些可以接受一个参数来产生另一个值......这些是函数。
    猜你喜欢
    • 2013-08-05
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多