gpt4 book ai didi

sml - Cons 在这个函数中做了什么?

转载 作者:行者123 更新时间:2023-12-04 17:38:56 24 4
gpt4 key购买 nike

我很困惑 Cons()函数确实如此,在 from 的函数定义中。

enter image description here

最佳答案

什么 Stream代表是lazy和潜在的无限列表。由于 SML 是 eager ,这需要以稍微迂回的方式完成。

我们先来看看普通列表是如何工作的:

datatype 'a list = [] | :: of 'a * 'a list

缺点包括两部分:
  • 列表中的第一个元素
  • 其余名单

  • 在惰性列表中,它非常相似。
    datatype 'a Stream = Nil | Cons of 'a * (unit -> 'a Stream) 

    这里的缺点包括以下几点:
  • 列表中的第一个元素
  • () 上求值时生成列表其余部分的函数

  • 因此,您可以看到原理大致相同,尽管使用起来有点困难。

    让我们看一个示例列表:
    fun succ n = Cons (n, fn () => succ (n+1))
    val naturals = succ 0

    这会产生什么?让我们检查一下。
    naturals被定义为 succ 0 ,这又被定义为 Cons(0, fn () => succ 1) .由此我们可以看出列表中的第一个元素是 0 .

    现在让我们更进一步。我们评估 fn () => succ 1 ,我们的第二部分 Cons , 在 () ,产生 succ 1 ,这又是 Cons(1, fn () => succ 2) .现在我们可以看到列表中的第二个元素是 1 .

    如果我们重复这个过程,我们会得到列表代表无限列表 [0, 1, 2, ...] .

    你也可以通过尝试这样做来看到这一点
    val firstnats = take 10 naturals;

    看看你得到了什么。

    关于sml - Cons 在这个函数中做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9246595/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com