OcamL惰性列表系列生成
OcamL lazy list series generating
我在执行此任务时遇到问题:
- 定义惰性列表 lSpec (Ocaml),其中包含一个 1、两个 2、三个 3 等 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 转换为创建不是整数系列,而是我任务中的系列。但是我不知道是否有一些模式可以创建这样的系列?
提前感谢您的帮助。
您现在的代码只使用一个值 k
来跟踪它在序列中的位置。从根本上说,这对于新问题来说已经足够了,但是仅使用一个数字表示状态会使事情难以跟踪。
您可能会考虑这样的事情:
let rec lspecfrom (j, k) = . . .
其中 j
是您正在处理的数字(1、2、3、4、...),k
是目前已生成的数字。然后整个列表将通过调用 lspecfrom (1, 0)
.
生成
我在执行此任务时遇到问题:
- 定义惰性列表 lSpec (Ocaml),其中包含一个 1、两个 2、三个 3 等 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 转换为创建不是整数系列,而是我任务中的系列。但是我不知道是否有一些模式可以创建这样的系列?
提前感谢您的帮助。
您现在的代码只使用一个值 k
来跟踪它在序列中的位置。从根本上说,这对于新问题来说已经足够了,但是仅使用一个数字表示状态会使事情难以跟踪。
您可能会考虑这样的事情:
let rec lspecfrom (j, k) = . . .
其中 j
是您正在处理的数字(1、2、3、4、...),k
是目前已生成的数字。然后整个列表将通过调用 lspecfrom (1, 0)
.