[학습 총화 - Haaskell - 2] Haskell 중요 데이터 구조: List
Table of Contents
1 하 스 켈 기본 지식
2 Haskell 중요 데이터 구조 - List
2.1 기본 지식 목록
ghci>let tList = [1,2,3,4]
ghci>tList
[1,2,3,4]
예 2 기본 요소 가 List 인 List
ghci>[[1,2],[3],[4,5,6]]
[[1,2],[3],[4,5,6]]
예 3 기본 요소 가 문자 인 List, 즉 문자열
ghci>['h','e','l','l','o']
"hello"
예 4 리스트 열거 표시
ghci>[1..10]
[1,2,3,4,5,6,7,8,9,10]
ghci>['a'..'e']
"abcde"
ghci>[2,4..10]
[2,4,6,8,10]
ghci>[5..2]
[]
ghci>[5,4..2]
[5,4,3,2]
예 5 List 의 설명 표시
ghci>[x | x <- [1..10], x > 3, x < 7]
[4,5,6]
ghci>[x + y | x <- [1,2,3], y <- [4,5]]
[5,6,6,7,7,8]
예 6 List 가 뭔 지 List 가 같은 유형의 요소 가 붙 어 있어 요.
ghci>3:[4,5]
[3,4,5]
ghci>3:4:[5]
[3,4,5]
ghci>3:4:5:[]
[3,4,5]
ghci>[1,2,3] ++ [4,5]
[1,2,3,4,5]
ghci>[4,2,1] !! 2
1
ghci>[4,2,1] !! 1
2
ghci>[4,2,1] !! 0
4
ghci>"hi,jack" !! 2
','
ghci>[1,2] > [2,3]
False
ghci>[1,2] > [1,1]
True
ghci>[1,2,3] > [1,2]
True
ghci>[1,2,-1] > [1,2]
True
ghci>[1,2] > [1,2,3]
False
2.2 관련 함수 목록
ghci>head [3,1,4]
3
ghci>tail [3,1,4]
[1,4]
ghci>init [3,1,4]
[3,1]
ghci>last [3,1,4]
4
ghci>length [3,1,4]
3
ghci>null [3,1,4]
False
ghci>null []
True
ghci>reverse [1,2,3,4]
[4,3,2,1]
ghci>take 2 [3,1,5]
[3,1]
ghci>take 1 [3,1,5]
[3]
ghci>take 0 [3,1,5]
[]
ghci>drop 2 [3,1,5]
[5]
ghci>drop 1 [3,1,5]
[1,5]
ghci>drop 0 [3,1,5]
[3,1,5]
ghci>maximum [1,5,2,3]
5
ghci>sum [1,2,3]
6
ghci>sum [1..10]
55
ghci>product [4,2,5]
40
ghci>3 `elem` [6,7,8]
False
ghci>6 `elem` [6,7,8]
True
ghci>7 `elem` [6,7,8]
True
ghci>elem 3 [6,7,8]
False
ghci>elem 6 [6,7,8]
True
ghci>elem 7 [6,7,8]
True
ghci>cycle [5,2,8]
[5,2,8,5,2,8,5,2,8,5,2,8,...] --
ghci>take 5 (cycle [5,2,8])
[5,2,8,5,2]
ghci>take 10 (cycle [5,2,8])
[5,2,8,5,2,8,5,2,8,5]
ghci>repeat 3
3,3,3,...
ghci>take 5 (repeat 3)
[3,3,3,3,3]
ghci>replicate 2 10
[10,10]
ghci>replicate 3 10
[10,10,10]
2.3 List 특성 을 이용 하여 프로그램 을 작성 하 다
boomBang xs = [ if x < 3 then "BOOM" else "BANG" | x <- xs ]
ghci>:l listProg.hs
[1 of 1] Compiling Main ( listProg.hs, interpreted )
Ok, modules loaded: Main.
ghci>boomBang [1..5]
["BOOM","BOOM","BANG","BANG","BANG"]
ghci>boomBang [0..4]
["BOOM","BOOM","BOOM","BANG","BANG"]
예 2
cartesianproduc xs ys = [ [x,y] | x <- xs, y <- ys]
ghci>cartesianproduc [3,2] [1,5,6]
[[3,1],[3,5],[3,6],[2,1],[2,5],[2,6]]
예 3
removeNonUppercase xs = [ x | x <- xs, x `elem` ['A'..'Z'] ]
ghci>removeUppercase "SDFAasdfRQf"
"SDFARQ"
head' [] = error "empty list can not be head"
head' (x:_) = x
ghci>head' []
*** Exception: empty list can not be head
ghci>head' "dafs"
'd'
ghci>head' [3,4,1]
3
예 2
tell [] = "This is a empty list"
tell (x:[]) = "This list have only one element:" ++ show x
tell (x:y:[]) = "This list have two elemtn: " ++ show x ++ " and " ++ show y
tell (x:y:_) = "This is a long list"
ghci>tell []
"This is a empty list"
ghci>tell [3]
"This list have only one element:3"
ghci>tell [3,4]
"This list have two elemtn: 3 and 4"
ghci>tell [3,4,5,6]
"This is a long list"
ghci>tell "sdfa"
"This is a long list"
ghci>tell "sd"
"This list have two elemtn: 's' and 'd'"
예 3
abbrev firstName lastName = [f] ++ "." ++ [l]
where (f:_) = firstName
(l:_) = lastName
ghci>abbrev "Tom" "Hacks"
"T.H"
ghci>abbrev "Alan" "Kay"
"A.K"
예 4
describeList ls = "This list is "
++ case ls of [] -> "empty"
[x] -> "a singleton list"
xs -> "a long list"
ghci>describeList []
"This list is empty"
ghci>describeList "a"
"This list is a singleton list"
ghci>describeList "hello"
"This list is a long list"
maxElem [] = error "Empty List have no max element"
maxElem [x] = x
maxElem (x:xs) = max x (maxElem xs)
ghci>maxElem []
*** Exception: Empty List have no max element
ghci>maxElem [1]
3
ghci>maxElem [3,2,6,1]
6
예 2
replicate' n x
| n <= 0 = []
| otherwise = x : replicate' (n-1) x
ghci>replicate' 0 2
[]
ghci>replicate' 5 2
[2,2,2,2,2]
예 3
take' n _
| n <= 0 = []
take' _ [] = []
take' n (x:xs) = x : take' (n-1) xs
ghci>take' (-3) [1,2]
[]
ghci>take' 4 [1..10]
[1,2,3,4]
예 4
reverse' [] = []
reverse' (x:xs) = reverse' xs ++ [x]
ghci>reverse' []
[]
ghci>reverse' [1..10]
[10,9,8,7,6,5,4,3,2,1]
예 5
elem' x [] = False
elem' x (y:xs)
| x == y = True
| otherwise = elem' x xs
ghci>elem' 5 [2,5,7]
True
ghci>elem' 5 [2,7]
False
quicksort
quickSort [] = []
quickSort (x:xs) =
let smallerPart = [a | a <- xs, a <= x]
largerPart = [a | a <- xs, a > x]
in quickSort smallerPart ++ [x] ++ quickSort largerPart
[a | a < = x, a < - xs] 형식 으로 쓰 지 않도록 주의 하 십시오. a 가 도 메 인 에 없 음 을 알려 줍 니 다. 먼저 a < - xs 를 써 야 a < = x 의 성립 여 부 를 결정 할 수 있 습 니 다.
ghci>quickSort [2,6,1,8,4]
[1,2,4,6,8]
ghci>quickSort []
[]
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.