[英]Invalid IL Code - F#
我是F#的新手,我正在尝试编写一个计算powerset的函数。
我收到来自Mono(在Mac上运行)的错误。
例如,我将通过calcPowerSet([1; 2; 3],[])来启动该函数。 有关如何解决问题的任何想法?
System.InvalidProgramException: Invalid IL code in FSI_0010:calcPowerSet (Microsoft.FSharp.Collections.List`1,Microsoft.FSharp.Collections.List`1): IL_005d: stind.r4 at FSI_0010.calcPowerSet[Int32] (Microsoft.FSharp.Collections.List`1 _arg1_0, Microsoft.FSharp.Collections.List`1 _arg1_1) [0x00000] at .$FSI_0011._main () [0x00000] at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (object,object[],System.Exception&) at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] stopped due to error
码:
let rec calcPowerSet = function | ([], []) -> [[]] | ((head::tail), (cHead::cTail)) -> calcPowerSet (tail, (cHead::cTail)) @ calcPowerSet (tail, (head::cHead::cTail)) | ((head::tail), []) -> calcPowerSet (tail, []) @ calcPowerSet (tail, [head]) | ([], collect) -> [collect];;
我不知道为什么它不起作用(我得到了相同的结果),但如果你把它重写为:
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(英特尔)下使用Mono 2.4和F#1.9.6.2可以正常工作
仅供参考,F#团队知道这个错误,这是Mono团队所知道的Mono 2.4中的一个错误(dunno,如果已经修复)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.