【问题标题】:Recursive Data types in smlsml 中的递归数据类型
【发布时间】:2012-10-25 17:35:54
【问题描述】:

有没有办法为整数定义数据类型。即 0,1,2,... 不是零,一个,... 单独。

我想定义一组整数。 bu 使用 0, n,n+1 和递归。 我尝试过这样的事情:数据类型 nat=0|n|n+1 。但是几乎很明显不起作用,因为它不将 0 识别为整数,对吗?

我将不胜感激。

【问题讨论】:

    标签: recursion sml smlnj abstract-data-type recursive-datastructures


    【解决方案1】:

    由于自然数的集合是可数无限的,所以你不能枚举所有的情况。

    你可以用Peano numbers在概念上表示自然数:

    datatype peano = Zero | Succ of peano
    

    数据类型很简单,它只定义了0,并保证每个自然数都有一个后继。例如,2实际上表示为Succ (Succ Zero)

    fun count Zero = 0
      | count (Succ p) = 1 + count p
    

    使用类似的技术,您可以像使用自然数一样构建addsubmult 函数。

    【讨论】:

    • 是的,但我需要使用使用 0,1,2,3 而不是 succ(succ(succ(zer0))) 的数据类型。所以我可以把它当作不可以,对于无限的 0,1,2,... 是不可能的?
    • @user1710036 如果您不介意我的询问,您为什么需要这种表示?
    • 为什么需要这种表示?它不是代表。我想要一个自然数的数据类型。就这样。而且我不想输入繁琐的 succ(succ(succ(succ(0))))。
    猜你喜欢
    • 2015-06-19
    • 2014-01-18
    • 1970-01-01
    • 2011-10-24
    • 2013-01-25
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多