ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Haskell] #1 List (1) ๊ธฐ๋ณธ์ ์ธ ์—ฐ์‚ฐ๋“ค
    ๊ณต๋ถ€/ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ 2020. 1. 11. 23:45

     

    Haskell์—์„œ, List(๋ฆฌ์ŠคํŠธ)๋Š” ๊ฐ™์€ ํƒ€์ž…์˜ ์ˆœ์„œ ์žˆ๋Š” ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํƒ€์ž…์„ ๋„ฃ์œผ๋ ค๊ณ  ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค.

    Haskell์—์„œ๋Š” ๋ฌดํ•œ ๋ฆฌ์ŠคํŠธ๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ, Haskell์€ Lazy ํ•œ ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ •๋ง ํ•„์š”ํ•  ๋•Œ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์—ฐ์‚ฐํ•ด์„œ ๋Œ๋ ค์ค๋‹ˆ๋‹ค. 

    ์ด ๋ถ€๋ถ„์€ Range์—์„œ ๋‹ค์‹œ ๋‹ค๋ฃฐ๊ฒŒ์š”!

     

    ๋ฆฌ์ŠคํŠธ ์ •์˜

     '[' ']' ๋กœ ๊ฐ์‹ธ๊ณ , ',' ๋กœ ๊ฐ ์›์†Œ๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

    [] // ๋นˆ ๋ฆฌ์ŠคํŠธ ์ž…๋‹ˆ๋‹ค.

    [1,3,4,5]
    "Hello world"
    ['H', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'] // "Hello world" ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. Haskell์—์„œ String์€ char์˜ ๋ฆฌ์ŠคํŠธ ์ž…๋‹ˆ๋‹ค.

    //๋ฆฌ์ŠคํŠธ ๋‚ด์—๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ["์•ˆ๋…•", "Hello world", "Lemon kim ๐Ÿ‹"] 

    [ [1, 3],  [3, 4, 5]] 

    ["์•ˆ๋…•", 1] // ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค!

    ๋ฆฌ์ŠคํŠธ์—์„œ ์›์†Œ ๊ฐ€์ ธ์˜ค๊ธฐ

    ๋ฆฌ์ŠคํŠธ !! ์›์†Œ ๋ฒˆํ˜ธ //์›์†Œ ๋ฒˆํ˜ธ๋Š” 0๋ฒˆ ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

     

    [1,3,4] !! 0 // 1
    "Hello world" !! 6 // 'w'

    ์ด ์›์†Œ๊ฐ€ ๋ฆฌ์ŠคํŠธ์— ์†ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ

    ํ™•์ธํ•  ์›์†Œ `elem` ๋ฆฌ์ŠคํŠธ // ์ค‘์œ„ ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ• ( ํ•จ์ˆ˜๋ช… ์•ž ๋’ค๋กœ ` (grave Accent, ์–ต์Œ ๋ถ€ํ˜ธ) ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”)

    elem ํ™•์ธํ•  ์›์†Œ ๋ฆฌ์ŠคํŠธ

    ๋ฆฌ์ŠคํŠธ ํ•ฉ์น˜๊ธฐ

    ๋’ค๋กœ ๋ถ™์ด๊ธฐ

    ๋ฆฌ์ŠคํŠธ ++ ๋’ค์— ๋ถ™์„ ๋ฆฌ์ŠคํŠธ

     

    "hello" ++ "hello"

    "hellohello"

     

    ์•ž์œผ๋กœ ๋ถ™์ด๊ธฐ

    ์•ž์— ๋ถ™์ผ ๋ฆฌ์ŠคํŠธ : ๋ฆฌ์ŠคํŠธ

     

    'H' : "ello world"

    "Hello world"

    ๋ฆฌ์ŠคํŠธ์—์„œ ์ผ๋ถ€ ์›์†Œ ๋ฆฌ์ŠคํŠธ ๊ฐ€์ ธ์˜ค๊ธฐ 

    ๋ฌดํ•œ ๋ฆฌ์ŠคํŠธ์˜ ๊ฒฝ์šฐ ๊ฐ€์ ธ์˜ฌ ์›์†Œ๋ฅผ ์ œํ•œํ•˜๋Š”๋ฐ๋„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

     

    take

    take ์•ž์—์„œ๋ถ€ํ„ฐ ๊ฐ€์ ธ์˜ฌ ์›์†Œ ๊ฐœ์ˆ˜ ๋ฆฌ์ŠคํŠธ

     

    ์›์†Œ์˜ ๊ฐฏ์ˆ˜๋ณด๋‹ค ๋” ๋งŽ์ด ๊ฐ€์ ธ์˜ค๋ ค ์‹œ๋„ํ•˜๋ฉด ๊ทธ๋ƒฅ ๊ทธ ๋ฆฌ์ŠคํŠธ ์ „์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

     

    take 3 [1,2,3,4,5] // [1,2,3]
    take 6 [1,2,3,4,5] // [1,2,3,4,5]

     

    drop

    drop ์•ž์—์„œ๋ถ€ํ„ฐ ๋ฒ„๋ฆด ์›์†Œ ๊ฐฏ์ˆ˜ ๋ฆฌ์ŠคํŠธ

     

    ์›์†Œ์˜ ๊ฐฏ์ˆ˜๋ณด๋‹ค ๋” ๋งŽ์ด ๋ฒ„๋ฆฌ๋ ค ํ•˜๋ฉด ๋นˆ ๋ฆฌ์ŠคํŠธ ([])๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

     

    drop 3 [1,2,3,4,5] // [3,4,5]

    drop 6 [1,2,3,4,5] // []

    ๋งจ ์•ž, ๋งจ ๋’ค ์›์†Œ ๊ด€๋ จ ํ•จ์ˆ˜๋“ค

    ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋น„์–ด์žˆ๋‹ค๋ฉด ( [] ) ๋™์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

     

    head ๋ฆฌ์ŠคํŠธ // 0๋ฒˆ์งธ ์›์†Œ
    last ๋ฆฌ์ŠคํŠธ // ๋งˆ์ง€๋ง‰ ์›์†Œ
    init ๋ฆฌ์ŠคํŠธ // ๋งˆ์ง€๋ง‰ ์›์†Œ๋งŒ ๋นผ๊ณ  ๋ชจ๋“  ์›์†Œ
    tail ๋ฆฌ์ŠคํŠธ // 0๋ฒˆ์งธ ์›์†Œ๋งŒ ๋นผ๊ณ  ๋ชจ๋“  ์›์†Œ

     

    head [1,3,4,5]
    1

    tail [1,3,4,5] // 0๋ฒˆ์งธ ์›์†Œ๋งŒ ๋นผ๊ณ  ๋ชจ๋“  ์›์†Œ
    [3,4,5]

    init [1,3,4,5] // ๋งˆ์ง€๋ง‰ ์›์†Œ๋งŒ ๋นผ๊ณ  ๋ชจ๋“  ์›์†Œ
    [1,3,4]

    last [1,3,4,5]
    5

    ๋ฆฌ์ŠคํŠธ ๊ธธ์ด ๊ด€๋ จ ํ•จ์ˆ˜๋“ค

    ๋ฆฌ์ŠคํŠธ ๊ธธ์ด ๋ฐ˜ํ™˜

    length ๋ฆฌ์ŠคํŠธ

     

    length [5,4,3,2,1
    5  

     

    ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋น„์—ˆ๋Š”์ง€ ํ™•์ธ

    null ๋ฆฌ์ŠคํŠธ

    null []
    True

    null [1,3,4,5]

    False

    ๋ฆฌ์ŠคํŠธ ๋’ค์ง‘๊ธฐ

    ๋ฆฌ์ŠคํŠธ์˜ ์ˆœ์„œ๋ฅผ ๋’ค์ง‘์Šต๋‹ˆ๋‹ค

    reverse ๋ฆฌ์ŠคํŠธ

     

    reverse [5,4,3,2,1]  
    [1,2,3,4,5]  

    ๋ฆฌ์ŠคํŠธ ๋‚ด ์ตœ๊ณ /์ตœ์†Œ๊ฐ’ ์ฐพ๊ธฐ

    ์ตœ๊ณ ๊ฐ’

    maximum ๋ฆฌ์ŠคํŠธ 

     

    maximum [1,9,2,3,4]
    9  

     

    ์ตœ์†Œ๊ฐ’

     

    minimum ๋ฆฌ์ŠคํŠธ 

     


    minimum [8,4,2,1,5,6] 


    ๋ฆฌ์ŠคํŠธ ๋‚ด ๋ชจ๋“  ๊ฐ’ ๊ณ„์‚ฐ

    ๋ชจ๋“  ๊ฐ’ ๋”ํ•˜๊ธฐ

     

    sum ๋ฆฌ์ŠคํŠธ

     

    sum [5,2,1,6,3,2,5,7]  
    31 

     

    ๋ชจ๋“  ๊ฐ’ ๊ณฑํ•˜๊ธฐ

     

    product ๋ฆฌ์ŠคํŠธ

     

    product [6,2,1,2]  
    24  

    ๋ฆฌ์ŠคํŠธ ๋น„๊ตํ•˜๊ธฐ

    ๋ฆฌ์ŠคํŠธ1 [<, <=, >=, > , ==(equal), /= (not equal) ] ๋ฆฌ์ŠคํŠธ2

     

    ๋น„๊ต ์‹œ์—๋Š” ๊ฐ ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ™์€ ์ˆœ์„œ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ ธ์™€ ๋น„๊ต ํ•ฉ๋‹ˆ๋‹ค.

    ๋ฆฌ์ŠคํŠธ์˜ ๋‚ด์šฉ์ด ๊ฐ™๊ณ  ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ ๋‹ค๋ฅด๋‹ค๋ฉด, ์งง์€ ๋ฆฌ์ŠคํŠธ ์ชฝ์ด ์ž‘์€ ๊ฒƒ์œผ๋กœ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค.

     

    // < , <=
    [1,3,4,5] < [1, 3, 4, 6]
    True

    [1,3,4,6] < [1, 3, 4, 6]
    False

    //๋น„๊ต ํ•  ๋•Œ๋Š” ์•ž์—์„œ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ, ๊ฐ™์€ ์ž๋ฆฌ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ ธ์™€ ๋น„๊ตํ•ด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•ฉ๋‹ˆ๋‹ค.
    //0๋ฒˆ์งธ ์›์†Œ๋ฅผ ๋น„๊ตํ•ด๋ณด๋‹ˆ 3, 1์ด ๋‚˜์™”์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฒซ ๋ฒˆ์งธ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋” ํฌ๋‹ค๊ณ  ๋‚˜์˜ค๋„ค์š”.
    [3,1,4,5] > [1, 3, 4,5]
    True


    //๋น„๊ตํ•˜๋Š” ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด๊ฐ€ ๋‹ค๋ฅด๋‹ค๋ฉด, ์งง์€ ๋ฆฌ์ŠคํŠธ ์ชฝ์ด ์ž‘์€ ๊ฒƒ์œผ๋กœ ํŒ์ •๋ฉ๋‹ˆ๋‹ค.
    [1,2,3,4] < [1,2,3,4,-1]
    True


    [1,3,4,6] <= [1, 3, 4, 6]
    True


    [1,3,4,5] <= [1, 3, 4, 6]
    True

    //  > , >=
    [1,3, 5,4] > [1, 3, 4,5]
    True


    [1,3, 5,4] >= [1, 3, 4,5]
    True

    [1,3, 4,5] >= [1, 3, 4,5]
    True


    // ==
    [1,3,4,5] == [1, 3, 4,5]
    True

    // /= (not Equal)
    [1,3,4,5] /= [1, 3, 4,5] 
    False

    [1,3,5,4] /= [1, 3, 4,5] 
    True

    //๋ฆฌ์ŠคํŠธ์˜ ๋‚ด์šฉ์ด ๊ฐ™๋”๋ผ๋„ ์ˆœ์„œ๊ฐ€ ๋‹ค๋ฅด๋ฉด ๋‹ค๋ฅด๊ฒŒ ์ธ์‹ ํ•ฉ๋‹ˆ๋‹ค.
    [3,1,4,5] == [1, 3, 4,5]
    False 

     

    ์˜ค์™€... ์ƒ๊ฐ๋ณด๋‹ค ์–‘์ด ๋งŽ๋„ค์š” ๐Ÿ˜‚ ๋‹ค์Œ ๊ธ€์—์„œ๋Š” ๋ฆฌ์ŠคํŠธ์—์„œ ๋ฒ”์œ„ ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•  ๋•Œ ์“ธ Range์— ๋Œ€ํ•ด์„œ ๋‹ค๋ฃจ์–ด๋ณด๋„๋ก ํ• ๊ฒŒ์š”! 

    '๊ณต๋ถ€ > ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

    [Haskell] #5 Type (2)  (0) 2020.01.20
    [Haskell] #4 Type (1)  (0) 2020.01.19
    [Haskell] #3 Tuple  (0) 2020.01.12
    [Haskell] #2 List(2) Range, list comprehension  (0) 2020.01.12
    [Haskell] #0 Hello, Haskell!  (0) 2020.01.09

    ๋Œ“๊ธ€

Designed by Tistory. @Bola Kim