我是 F# 的新手,我正在尝试编写一个计算幂集的函数。
我从下面的 Mono(在 Mac 上运行)收到一个错误。
例如,我会通过 calcPowerSet ([1;2;3], []) 来启动函数。关于如何解决问题的任何想法?
System.InvalidProgramException: FSI_0010:calcPowerSet 中的 IL 代码无效 (Microsoft.FSharp.Collections.List`1,Microsoft.FSharp.Collections.List`1): IL_005d:stind.r4
在 FSI_0010.calcPowerSet[Int32] (Microsoft.FSharp.Collections.List`1 _arg1_0, Microsoft.FSharp.Collections.List`1 _arg1_1) [0x00000]
在 .$FSI_0011._main () [0x00000]
at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (object,object[],System.Exception&)
在 System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] 参数, System.Globalization.CultureInfo 文化) [0x00000]
由于错误而停止
代码:
让 rec calcPowerSet = 函数
| ([], []) -> [[]]
| ((head::tail), (cHead::cTail)) ->
calcPowerSet (tail, (cHead::cTail)) @calcPowerSet (tail, (head::cHead::cTail))
| ((头::尾), []) ->
calcPowerSet(tail,[])@calcPowerSet(tail,[head])
| ([], 收集) -> [收集];;
最佳答案
我不知道为什么它不起作用(我得到了相同的结果)但是如果您将其重写为:
let calcPowerSet =
let rec innerCalc =
function
| ([], []) -> [[]]
| ((head::tail), (cHead::cTail)) ->
innerCalc (tail, (cHead::cTail)) @ innerCalc (tail, (head::cHead::cTail))
| ((head::tail), []) ->
innerCalc (tail, []) @ innerCalc (tail, [head])
| ([], collect) -> [collect]
innerCalc
它似乎在 Mac (intel) 下使用 Mono 2.4 和 F# 1.9.6.2 运行良好
关于f# - IL 代码无效 - F#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/837676/