返回OCaml中列表中的元素列表

All*_*ang 7 ocaml functional-programming list ml

我是OCaml的新手,我现在正在尝试实现一个函数,该函数返回列表x中索引的给定列表的元素列表y.

例如,该函数应执行以下计算: [5,6,7,8], [0, 3] => [5, 8]

我不知道如何在ML中存储临时变量,并且不清楚它是如何工作的.但我知道如何从给定指定索引的列表中查找元素.

任何想法将不胜感激,但我想使用递归函数并避免使用该List模块.

man*_*nge 7

不需要临时变量,只需使用递归!

# 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)

它通过遍历提供的每个索引来构建列表,然后将其输入到下一步返回的列表中.

希望这也被优化为尾递归形式,但我不太确定.您可能希望将其更改为正确的尾递归,但我会将其留给您.