필자는 F #을 처음 사용하며 powerset을 계산하는 함수를 작성하려고합니다.잘못된 일리노이 코드 - F #
아래에있는 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 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
이가 보인다
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];;
어떤 버전의 F #? (예 : 1.9.6.2) – Brian
FYI - Windows에서 1.9.6.2에서 예상대로 기능이 작동합니다. – Brian
흥미 롭습니다. 나는 F # 1.9.4.19를 사용하고있다. 나는 윈도우 머신을 사용할 것이다. 이것이 모노 구현 문제일까요? – Ipster