0

我对这个任务有疑问:

  • 定义包含一个 1、两个 2、三个 3 等的惰性列表 lSpec (Ocaml) 1,2,2,3,3,3,4,4,4,4,5,...

据我所知:

type 'a llist = LNil | LCons of 'a * (unit -> 'a llist);;

let rec lfrom k = LCons (k, function () -> lfrom (k+1));; 

let rec ltake = function  
(0, _) -> []  
| (_, LNil) -> []  
| (n, LCons(x,xf)) -> x::ltake(n-1, xf()) ;;

此函数根据输入数字生成整数系列,例如。

ltake (5,lfrom 30);; 
- : int list = [30; 31; 32; 33; 34] 

我想做的事情是将函数 lfrom 转换为创建的不是整数系列,而是我任务中的系列。但我不知道是否有一些模式可以创建这样的系列?

提前感谢您的帮助。

4

1 回答 1

0

您现在拥有的代码仅使用一个值k来跟踪它在序列中的位置。从根本上说,这对于新问题来说已经足够了,但是只使用一个数字来表示状态会使事情难以跟踪。

你可能会考虑这样的事情:

let rec lspecfrom (j, k) = . . .

您正在处理的数字在哪里j(1、2、3、4,...),k到目前为止已经生成了多少。然后整个列表将由 call 生成lspecfrom (1, 0)

于 2017-12-05T18:22:28.387 回答