All*_*ang 7 ocaml functional-programming list ml
我是OCaml的新手,我现在正在尝试实现一个函数,该函数返回列表x中索引的给定列表的元素列表y.
例如,该函数应执行以下计算: [5,6,7,8], [0, 3] => [5, 8]
我不知道如何在ML中存储临时变量,并且不清楚它是如何工作的.但我知道如何从给定指定索引的列表中查找元素.
任何想法将不胜感激,但我想使用递归函数并避免使用该List模块.
不需要临时变量,只需使用递归!
# let rec indices xs = function
| i :: is -> (List.nth xs i) :: indices xs is
| [] -> []
;;
val indices : 'a list -> int list -> 'a list = <fun>
# indices [5;6;7;8] [0;3] ;;
- int list = [5; 8]
Run Code Online (Sandbox Code Playgroud)
它通过遍历提供的每个索引来构建列表,然后将其输入到下一步返回的列表中.
希望这也被优化为尾递归形式,但我不太确定.您可能希望将其更改为正确的尾递归,但我会将其留给您.