2009-05-08 4 views
4

필자는 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];; 
+0

어떤 버전의 F #? (예 : 1.9.6.2) – Brian

+0

FYI - Windows에서 1.9.6.2에서 예상대로 기능이 작동합니다. – Brian

+0

흥미 롭습니다. 나는 F # 1.9.4.19를 사용하고있다. 나는 윈도우 머신을 사용할 것이다. 이것이 모노 구현 문제일까요? – Ipster

답변

2

당신이 그것을 다시 것처럼 작동 (I이 같은 결과를 얻었다)하지만하지 않는 이유를 모르겠어요 Mono 2.4와 F # 1.9.6.2와 함께 Mac (Intel)에서 잘 작동합니다.

+0

(내 의견을 질문의 주석 참조) Johan의 메서드와 같은 내부 함수를 사용하여 내 함수를 변경하고 작동합니다. 여기의 변경 사항을 확인하십시오 : http://pastebin.com/m6ec637a7 – phi

+0

네, 나를 위해 일했습니다. – Ipster

2

참고로, F # 팀은이 버그를 알고 있으며, Mono 2.4의 버그입니다. 어떤 팀도 알지 못합니다 (아직 해결되지 않은 경우 dunno).

+0

잘 알고 있습니다 - 버그 추적 포럼이 있습니까? 진행 상황을 따라갈 수 있습니까? – Ipster

+0

빠른 웹 검색은 https://bugzilla.novell.com/show_bug.cgi를 찾았습니까?id = 419828 – Brian

+0

여전히 F # 및 모노 버그에 관해서는 Flying Frog Consultancy 블로그의 게시물을 기억합니다. 모노 테일 재귀 버전 2.2는 아직 지원되지 않았기 때문에 누출 된 메모리가 발생했습니다. 모노가 아니라 상황은 어때?) – em70