F#의 type inference는 Haskell을 쓸 때보다 주의할 점이 있다.
예제로, 수 목록을 구간 목록으로 변환하는 프로그램을 작성해보았다.
F#에서는 이렇게 리스트에 대해 .[0]을 사용하면 타입 선언 없이는 컴파일되지 않는다:
let addToIntervals (intervals: (int * int) list) (n: int) =
if not intervals.IsEmpty && n = (fst intervals.[0]) - 1
then (n, (snd intervals.[0])) :: (List.tail intervals)
else (n, n) :: intervals
let toIntervals (nums: int list) =
List.fold addToIntervals [] (List.sortDescending nums)
// test
let numbers = [1;2;3;5;6;8]
printfn "%A" (toIntervals numbers)
List.head를 .[0] 대신 사용하면 잘 된다. (.[0]은 앞의 대상이 List인 줄을 몰라서 그런 것 같다.)
Haskell에서는 이렇게 타입 선언 없이 잘 된다:
'Programming' 카테고리의 다른 글
Functional programming languages: F# vs Haskell (0) | 2023.09.21 |
---|---|
GHCi는 느리다. (2) | 2023.09.21 |
Java, C# Converter (0) | 2023.09.17 |
[C#] I wish I knew : RealProxy (0) | 2023.09.13 |
(C++) variant와 monostate (0) | 2023.09.07 |