我正在尝试创建一个通用序列,其行为如下:
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));
我有两个问题:
无法编译
我不确定我的方法是否正确
希望得到一些帮助。
最佳答案
好吧,我明白了,
我创建了一个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/