作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在查看列表文档。似乎该库未提供sublist
函数。
我正在尝试获取从i到j的元素列表。现在,我必须将其编写为:
let rec sublist list i j =
if i > j then
[]
else
(List.nth list i) :: (sublist list (i+1) j)
List.nth
的效率,因为如果它是O(n),我宁愿以一种不太简洁的方式编写它。
List.sublist
不是O(1),他们为什么不提供
List.nth
函数,因为这是一个非常常见的操作。
最佳答案
let rec sublist b e l =
match l with
[] -> failwith "sublist"
| h :: t ->
let tail = if e=0 then [] else sublist (b-1) (e-1) t in
if b>0 then tail else h :: tail
;;
sublist 3 5 [1;2;3;4;5;6;7;8;9] ;;
- : int list = [4; 5; 6]
drop i list
),编译器可以在Haskell中进行优化,而在ML中则更为困难。因此,对于Haskell函数来说,他的版本是完美的,而对于ML语言来说,他的版本是次优的。两者之间的差异只是一个常数:两者均为O(e)。 zrr的版本为O(length(l)),因为
List.filteri
不知道
f
仅在一段时间后返回
false
,因此它会针对
l
中的所有元素进行调用。
b
变为负数,但没有的版本更加复杂。
关于list - 如何从ocaml中的列表中获取子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2710233/
我是一名优秀的程序员,十分优秀!