在ocaml中建立一个整数列表
|
我想编写一个在两个整数(包括两个整数)之间建立列表的函数
rec myFunc x y将建立一个列表,其中包含x和y之间的所有整数,包括x和y
对于现在的逻辑,我有这样的事情:
let rec buildList i n = let x = i+1 in if i <= n then i::(buildList x n)
但这给了我一个错误“表达式的类型为列表”,但是期望表达式的类型为unit。
我以为buildList返回一个int列表,而我作为int,所以cons运算符将是有效的,但是它说应该是无效的?
为什么会发生这种情况,我该如何解决?
没有找到相关结果
已邀请:
5 个回复
良阑纠苫
。如果不正确,您还会返回什么? 不满足条件时,在函数中添加“ 2”以返回空列表。 当您没有任何“ 3”时,编译器会认为它是“ 4”(因此出现错误信息)。
贡炮逗握惫
缺少
条件 我建议您使用尾部递归函数:
首先,请确保您正确地确定了边界的顺序(防白痴),然后通过使用累加器的局部递归函数构造列表。
济畦刨
使用Enum,允许使用惰性数据结构,
宠封钞轰
编辑: 运算符的选择位于递归部分内,最好像这样在外部:
在超过200000个元素时,我得到了堆栈溢出(所以我们到了)
待办事项:尾递归
敦肌
测试: