갈루아의 반서재

Comparing lists

하스켈 리스트는 값이고, 값으로 비교가능하다. 아래를 보자.

1
2
3
4
5
6
7
8
9
10
 
Prelude> [3,4] == [1+2,2*2]
True
 
Prelude> [3] ++ [] ++ [4] == [3,4]
True
 
Prelude> tail (tail [3,4,5,6]) == [last [4,5]] ++ [6]
True
 
cs

리스트의 비교는 사전 편찬상의 순서를 따른다. 대응되는 원소간의 비교는 서로 다른 것이 나타날 때까지 계속되고, 서로 다른 원소를 비교결과가 그 리스트의 비교 결과가 된다. 

1
2
3
 
Prelude> [1,2,3] < [1,2,4]
True
cs

위의 경우 첫 2개의 원소는 동일함으로  3과 4를 비교하게 되고, 그 결과 4가 더 크므로 True 가 된다. 예제를 좀 더 살펴보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
 
Prelude> [1,2,3] < [1,2,4]
True
 
Prelude> [1,2,3] < [1,1,1,1]
False
 
Prelude> [1,2,3] > [1,2]
True
 
Prelude> [1..] < [1,3..] --- 무한 리스트 비교
True
 
cs


Lists of Lists

리스트를 원소를 갖는 리스트도 만들 수 있다.

1
2
3
4
5
6
7
8
 
Prelude> let x = [[1], [2,3,4], [5,6]]
x :: Num t => [[t]]
 
Prelude> length x
3
it :: Int
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
Prelude> let x = [[1],[2,3,4],[5,6]]
x :: Num t => [[t]]
 
Prelude> head x
[1]
it :: Num t => [t]
 
Prelude> tail x
[[2,3,4],[5,6]]
it :: Num t => [[t]]
 
Prelude> x !! 1 !! 2
4
it :: Num a => a
 
cs