F #

2012-11-26 6 views
1

에서 수면 측정 단위가 여러 개인 목록 만들기 이렇게 다양한 방법으로이 문제를 해결하려했지만이 작업을 수행 할 수 없습니다.F #

다양한 측정 단위 값을 포함하는 목록을 만드는 방법은 무엇입니까 (모두 플로트 기준)? 예 :

let myList = [0.07<ms>; 0.9; 7.2<mm>;] 

다른 유형으로 처리되므로 동일한 목록에 넣을 수 없습니다. 나는 목록을 let myList : float<_> list = ...으로 선언하고 무 차원 숫자를 측정 단위로 지정했으나 여전히 타이핑 오류가 발생했습니다 : float을 기대합니다 : float < 'u>하지만 float을 얻었습니다.

목록에 포함될 값의 수를 모르기 때문에 튜플/프레임을 사용할 수 없습니다.

저는 F #에 처음으로 익숙해졌으며 문서 및 웹을 저장소에서 수색하는 데 많은 시간을 투자했지만 해결책을 찾지 못했습니다. 누군가가 올바른 방향으로 나를 가리킬 수 있다면, 나는 정말로 감사 할 것입니다. 고맙습니다!

+5

그렇게 할 동기를 부여 할 수 있습니까? 컴파일러는 좋은 일을하도록 강요합니다. – pad

+0

목록을 함수에 대한 매개 변수로 사용하고 싶습니다. 여기서 값은 약간 다른 방식으로 사용됩니다. 파생 클래스에서 생성 된 개체가 모두 같은 추상 클래스에있는 개체에 따라 계산됩니다. 왜 내가 좋은 일을하도록 강요합니까? 이해가 안돼! – RachelB

+3

우모 (UoM)는 우연히'seconds'와'meters'가 우연히 만나는 것을 방지하기 위해 실제로 이런 이유로 개발되었습니다. 값을 처리 할 함수는 적절한 인수 유형을 유추합니다. 사용법을 이해하기 위해 사용 코드를 알려주십시오. – bytebuster

답변

4

이 목록을 사용하는 방법을 보여주는 더 긴 예제를 제공해야합니다. 그렇지 않으면 사용에 의존하기 때문에 좋은 대답을하는 것은 어렵습니다. 당신은 단지 다른 것을 대표 번호 목록을 만들려면

, 당신은 그들을 구분하는 차별 조합을 사용하여 고려할 수 있습니다 : 다음

type Numeric = 
    | Length of float<mm> 
    | Time of float<ms> 
    | Unitless of float 

let myList = [ Time 0.07<ms>; Unitless 0.9; Length 7.2<mm>;] 

서로 다른 번호를 포함하는 목록을 만들 수 있습니다 (다른 물리적 의미와 함께). 목록을 반복 할 때 패턴 매칭을 사용하여 값을 추출해야합니다.

또는 목록을 만들 때 모든 단위를 삭제할 수 있지만 측정 단위가 제공하는 보증을 잃을 수 있습니다. 즉, 목록에서 값을 얻을 때 어떤 단위를 갖고 있는지 알 수 없으며 잘못 해석 할 수 있습니다.)

let myList = [ float 0.07<ms>; 0.9; float 7.2<mm>;] 

an F# library that lets you track units at runtime을 사용할 수도 있습니다.

+0

고마워요, 이건 정말 도움이 됐어요! 차별화 된 노동 조합을 생각하지 않았다는 것을 믿을 수 없습니다. 이것은 내가하고 싶은 일에 잘 작동하는 것 같습니다 ... 지금까지 제가 말할 수있는 한! 아직 일종의 조사 단계에 있으므로 보여줄 코드가별로 없으며이 단계에서별로 의미가 없지만 사과하고 어쨌든 도와 주신 것에 대해 감사드립니다. :) 링크를 가져 주셔서 감사합니다. 나는 이것과 관련된 몇 가지 사항을 막연하게 읽었으며 아직 그 게시물을 발견하지 못했습니다. – RachelB