sml - 自然数的通用序列

标签 sml lazy-sequences

我正在尝试创建一个通用序列,其行为如下:

val generic_sequence= fn : (int -> int) -> int seq

也就是说,它应该接收一个函数作为输入:

foo: int -> int

并创建一个在所有自然数上激活 foo 的序列。

我编写了以下辅助代码(工作正常):

datatype 'a seq = Nil 
              | Cons of 'a * (unit-> 'a seq);

fun head (Cons(x,_)) = x;
fun tail (Cons (_,xf)) = xf();

fun naturals k = Cons(k,fn()=>naturals (k+1));

当我尝试实现通用序列时,我陷入了困境。 这就是我的地方。

fun aux (Cons(x,xf))= (Cons(foo x,(fn=>aux((xf())))));

fun generic_seq foo = (aux (from 0));

我有两个问题:

  1. 无法编译

  2. 我不确定我的方法是否正确

希望得到一些帮助。

最佳答案

好吧,我明白了,

我创建了一个mapq函数,它基本上为我做了所有事情。

 fun mapq f Nil = Nil 
   | mapq f (Cons (x,xf)) = Cons (f(x), fn() => mapq f (xf()));

关于sml - 自然数的通用序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50678913/

相关文章:

f# - 生成无限的数字集

sml - SML 中的 If Else 中的多个语句

sml - 递归 pretty-print 表达式

sml - val it = () : unit mean in SML? 是什么意思

Clojure 惰性序列 : Equivalents in Kotlin

Clojure:从惰性序列中提取具有特定值的映射

haskell - SML 到 Haskell 的转换

sml - 在 sml 中创建堆栈

rust - Rust 中的惰性序列生成

ruby - 使用索引无限次地做某事