我理解并写了F#的典型功率设置功能(类似于算法节Wikipedia)混淆F#List.Fold(幂函数)
后来我发现这个实现幂的,这似乎不错,紧凑,期待我不理解它。
let rec powerset = function
| [] -> [[]]
| h::t -> List.fold (fun xs t -> (h::t)::t::xs) [] (powerset t);
我打破了这种下降到1个步骤非递归函数来查找的幂[1; 2]和在端部硬编码的功率设定的2的值[[2]; []]
let right = function
| [] -> [[]]
| h::t -> List.fold (fun acc t -> (h::t)::t::acc) [] [[2]; []];
输出是[[1]; []; [1; 2]; [2]]
这是正确的。
但是我期待List.Fold输出[[1; 2]; []; [1; 2]; [2]]
。
因为我不确定't',所以我修改了变量名,并且确实得到了我的预期。当然,这不是[1; 2]的正确权力。
let wrong = function
| [] -> [[]]
| h::t -> List.fold (fun acc data -> (h::t)::data::acc) [] [[2]; []];
对我来说,“T”(一个withing乐趣,而不是为H :: T)简直就是第二个参数为“好玩”的名称,但是这显然不是这样的。那么我写的“正确”和“错误”F#函数有什么区别?这里的“t”究竟是指什么?
谢谢! (我是F#的新手)
谢谢!这正是我需要的,现在整个功能都是有意义的。 't'arg让我寻找不存在的模式:)! – Preets 2011-05-25 15:52:20
@Preets:不客气! – 2011-05-25 16:23:40