일부 하스켈 코드를 F #으로 포팅하지만 사용 가능한 모음과 F #의 서명에 대해 혼란스러워합니다. 필자는 목록의 요소가 [], {} 사이의 시퀀스 및 [| |]. F # Interactive에서는 5 개의 정수로 각 컨테이너를 만들 때 다음을 얻습니다.F #의 목록과 [] 사이의 차이점
// List
> [1..5]
val it : int list = [1; 2; 3; 4; 5]
// Seq
> {1..5}
val it : seq<int> = seq [1; 2; 3; 4; ...]
// Array
> [|1..5|]
val it : int [] = [|1; 2; 3; 4; 5|]
나를 혼란스럽게하는 것은 배열의 형식 서명이 int []
입니다. 유형이 int array
또는 int [||]
일 때 덜 혼란 스럽습니까? 형식 서명을 보면, 나는 목록이라고 생각하는 경향이있다. 특히 빈 목록도 []로 표현되기 때문에 그렇다.
여기 하나의 질문 : seq<int>
이 아닌 int seq
인 이유는 무엇입니까? 나는 이것이 통사론 설탕일지도 모르지만이 뒤에 다른 것이 있을지도 모른다.
type T1 = T1 of int list
type T2 = T2 of int seq // becomes type T2 = T2 of seq<int>
type T3 = T3 of int array
type T4 = T4 of int []
는 T3이며, T4 같은 일 :
지금 컬렉션을 사용하여 새로운 유형을 만들어?
일부 퀴즈 : F #의 int [] [,] 형식은 차원이 바뀌지 만 C#의 int [,] [] 형식과 동일합니다. 이것은 int list list와 같은 F #의 다른 접미사 유형 이름과 일관성을 유지하기위한 것입니다. – gradbot
당신은 또한이 흥미로운 것을 발견 할 수 있습니다. http://www.atalasoft.com/cs/blogs/rickm/archive/2009/01/29/f-and-haskell-estranged-cousins.aspx – gradbot