haskell - ghci 自引用赋值

标签 haskell ghci

今天我在学习一些新的 Haskell,当时我在 ghci 中尝试了一些东西。
它基本上归结为:

Prelude> let x = 6
Prelude> x
6
Prelude> let y = show x
Prelude> y
"6"
Prelude> let x = show x
Prelude> x
"\"\\\"\\\\\\\"\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" --(repeats)

那么ghci不能在赋值中自我引用吗?我觉得它类似于 i = i++;在 C 中,或尝试引用 let 的先前分配(不是 let* )在方案中。有没有办法做到这一点,或者我应该使用更简单的 let y = show x ?

最佳答案

Haskell 中的定义默认是递归的。所以你为 x 所做的定义指的是完全相同的x ,这就是您看到的字符串很长的原因,因为 x定义为 String这是调用 show 的结果本身,所以你一直看到显示字符串的开头引号,然后那些开头引号转义,等等。

这些类型的定义可能非常有用。例如,如果你写:

let fibs = 0 : 1 : zipWith (+) fibs (tail fibs)

您可以根据自身将斐波那契数列定义为无限列表。

然后你可以做一些类似 take 10 fibs只看到前 10 个元素。

关于haskell - ghci 自引用赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21223600/

相关文章:

macos - 如何将源文件加载到 Haskell (ghci) 中?

haskell - 无法将预期类型 `[([Char], a0)]' 与实际类型 `([Char], t0)' Haskell 匹配

haskell 解析 n+k 模式的模式错误

Haskell 函数类型说明

haskell : Filtering a list of strings

arrays - Haskell 中的卡住和解冻数组

function - 在 GHCi 中,为什么函数箭头 `:kind (->)` 的类型包含问号 `(->)::?? -> ? -> *` ?

performance - 从 ghci 和 shell 运行的已编译加速代码的性能差异

Haskell执行顺序

Haskell 代码中充斥着 TVar 操作和函数,带有许多参数 : code smell?