【发布时间】:2017-10-27 06:47:46
【问题描述】:
https://ocaml.org/learn/tutorials/99problems.html
我试图了解生成从列表的 N 个元素中选择的 K 个不同对象的组合的解决方案。代码如下:
let extract k list =
let rec aux k acc emit = function
| [] -> acc
| h :: t ->
if k = 1 then aux k (emit [h] acc) emit t else
let new_emit x = emit (h :: x) in
aux k (aux (k-1) acc new_emit t) emit t
in
let emit x acc = x :: acc in
aux k [] emit list;;
emit 函数被定义为接受两个参数:
let emit x acc = x :: acc
所以我不太明白以下行是如何工作的,因为它调用 emit 时只给出一个参数:
let new_emit x = emit (h :: x)
另外,new_emit函数只接受一个参数,并作为参数传递给aux函数,它如何处理下面的行(这里的emit是通过给两个参数来调用的):
if k = 1 then aux k (emit [h] acc) emit t
【问题讨论】:
标签: function functional-programming ocaml combinations