我对文档感到有些困惑fix(虽然我认为我理解它现在应该做什么),所以我查看了源代码.这让我更加困惑:
fix :: (a -> a) -> a
fix f = let x = f x in x
Run Code Online (Sandbox Code Playgroud)
这究竟是如何返回固定点的?
我决定在命令行试一试:
Prelude Data.Function> fix id
...
Run Code Online (Sandbox Code Playgroud)
它挂在那里.现在公平地说,这是在我的旧Macbook上,这有点慢.但是,此功能也不能太过,因为任何东西传递给ID给出了同样的事情,回(更不用提,它的吃了没有CPU时间)计算昂贵.我究竟做错了什么?
在箭头符号中,您可以使用rec关键字来编写递归定义.例如:
rec
name <- function -< input
input <- otherFunction -< name
Run Code Online (Sandbox Code Playgroud)
这怎么能评估?它似乎只会进入一个无限循环或其他东西.我知道它评估循环箭头组合器,但我不明白它是如何工作的.
编辑:权力示例非常有用.但是你怎么用写符号来写呢?我假设你需要使用rec.