2011-01-10 7 views
3

숫자가있는이 메서드를 작성하면 목록에 값에 따라 올바른 위치에 숫자가 삽입 된 새 목록이 반환됩니다. (I은 삽입 정렬을하고 있어요.)목록의 항목 비교

let rec insertinto number numbers = 
    match numbers with 
    | [] -> [number] 
    | head::tail -> if head > number then number::numbers else head::(insertinto number tail) 

F #이 방법의 유형으로 추측 :

val insertinto : 'a -> 'a list -> 'a list when 'a : comparison 

내가

를 얻을 내가

[4; 10; 15] |> insertinto 12 

으로이 방법을 테스트하는 경우

val it : int list = [4; 12; 10; 15] 

분명히 잘못되었습니다. 'head> number'비교가 올바르게 작동하지 않습니다.

것은 그것이 내가 숫자 매개 변수의 유형을 지정해야 작동하도록하려면 다음

let rec insertinto number numbers: int list = 

모든 일을하지만, 내가 INT 목록에 모든 시간을 사용 싶지 않다, 나는 일이 원하는 모든 유형의 목록이 있습니다. 형식이 비교를 구현하는 한 확실히 작동합니다.

왜 이것이 일반 목록이 아닌 int 목록에서 작동합니까? 내가 뭘 놓치고 있니?

편집

확인,이 모노에만 문제가 나타납니다.

+3

저의 작품 ... 어떤 플랫폼을 사용하고 있습니까? – kvb

+2

형식 선언이없는 원래 함수가 제대로 작동합니다. 우연히 fsi로 Visual Studio에서이 작업을 수행하고 있습니까? Visual Studio를 사용하고, 텍스트를 선택하고, alt-enter를 사용하여 fsi 창으로 보내고 싶습니다. 가끔씩 오류가 있습니다. VS 편집기에서 업데이트하지만 fsi로 다시 보내야한다는 것을 잊지 마십시오. 그래서 두 개가 동기화되지 않았고 fsi에서 함수를 다시 실행할 때 약간의 불안감을 느낄 수 있습니다 (특히 월요일 아침의 첫 번째 항목). 보고있는 행동을 확실하게 재현 할 수 있습니까? – Juliet

+1

그건 재미 있어요. 나는 Mac에서 Monodevelop로 이것을하고있다. –

답변

3

Mono (버전 2.8)를 사용하여 Mac에서 코드를 테스트 한 후 최신 F # 통합 기능이있는 MonoDevelop와 첫 번째 기능 (형식 주석없이)이 예상대로 작동합니다.

그러나 이전 버전의 Mono 버그 인 경우 너무 놀라지 않을 것입니다. 2.6.x에는 여러 가지 문제가있었습니다. 잘못된 결과를주는 것은 이상한 오류입니다 (일부 오류 메시지 또는 충돌이 더 자주 발생 함). 그러나 일부 문제로 인해 발생할 수 있습니다. Mono 버전을 확인할 수 있습니까?

나는 이것을 사용하고 있는데 그것을 잘 작동합니다 :

fsmac:~ tomaspetricek$ mono -V 
Mono JIT compiler version 2.8 (tarball Thu Oct 7 12:23:27 MDT 2010) 
Copyright (C) 2002-2010 Novell, Inc and Contributors. www.mono-project.com 

당신은 모노의 2.6.x에 실행 F 번호, 매우했다 제네릭 많은 문제를 해결 2.8 (사용하는 것이 좋습니다 수 있지만 F # 차단)

+0

아, 그 것들을 설명합니다. 나는 2.6.7에 있었다. 업데이트로 정렬했습니다.(btw 그것은 내 영광을 고쳐 주셔서 대단히 영광입니다. 필자는 기능적 프로그래밍 책을 완전히 즐기고 있습니다! 많은 것을 배우고 있습니다. 감사합니다 :)) –