【问题标题】:multi-directional infinte sequence - ML多向无限序列 - ML
【发布时间】:2014-07-19 07:09:42
【问题描述】:

我想使用定义如下的数据类型序列:

 datatype 'a seq = Nil | Cons of 'a * (unit-> 'a seq);
 exception EmptySeq; 
 fun head(Cons(x,_)) = x | head Nil = raise EmptySeq; 
 fun tail(Cons(_,xf)) = xf() | tail Nil = raise EmptySeq;

必须选择向后和向前迭代函数:

   datatype direction = Back | Forward; 
   datatype 'a bseq =   bNil | bCons of 'a * (direction -> 'a bseq);

我也定义了这些:

fun bHead(bCons(x,_)) = x | bHead bNil = raise EmptySeq; 
fun bForward(bCons(_,xf)) = xf(Forward) | bForward bNil = raise EmptySeq; 
fun bBack(bCons(_,xf)) = xf(Back) | bBack bNil = raise EmptySeq;

现在,我要做的是创建一个函数“create_seq”,它获取一个整数“k”并返回一个可以来回迭代的无限序列。 例如:

 - create_seq 2; 
val it = bCons (2,fn) : int bseq 
- bForward it; 
val it = bCons (3,fn) : int bseq 
- bForward it; 
val it = bCons (4,fn) : int bseq 
- bBack it; 
val it = bCons (3,fn) : int bseq 
- bBack it; 
val it = bCons (2,fn) : int bseq 
- bBack it; 
val it = bCons (1,fn) : int bseq 
- bBack it; 
val it = bCons (0,fn) : int bseq 
- bBack it; 
val it = bCons (~1,fn) : int bseq

这是我一直在尝试做的,但无法弄清楚为什么它不起作用:

fun create_seq k = (k,fun check Forward = create_seq(k+1) 
| check Back = create_seq(k-1));

也不是这个:

fun create_seq k = (k,fn x => case x of Forward => create_seq(k+1)
                       | Back => create_seq(k-1));

甚至这个:

fun create_seq k = (k,fn Forward => create_seq(k+1)
                       | Back => create_seq(k-1));

【问题讨论】:

    标签: ml infinite-sequence


    【解决方案1】:

    我好像忘记了构造函数:

    fun intbseq(k:int) = bCons(k,fn Forward => intbseq(k+1)| Back => intbseq(k-1));
    

    这应该可以。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-30
      • 1970-01-01
      • 2017-05-19
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      • 2015-12-29
      • 2016-06-11
      相关资源
      最近更新 更多