ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Haskell] #3 Tuple
    곡뢀/ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° 2020. 1. 12. 17:47

    μ•ˆλ…•ν•˜μ„Έμš”, Lemon Kim μž…λ‹ˆλ‹€! 였늘이 1μž₯의 λ§ˆμ§€λ§‰μ΄μ—μš”! μœΌμ•„.... λ²Œμ¨λΆ€ν„° ν‰μ†Œμ— μžˆλŠ” κ°œλ…μ΄ μ—†κ³  μƒμ†Œν•œ κ°œλ…μ΄ μΆ”κ°€λ˜κ³  μžˆμ–΄μ„œ 머리에 김이 λ‚˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

     

    이전 편 (List)

    2020/01/12 - [곡뢀/ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°] - [Haskell] #2 List(2) Range, list comprehension

     

    μ‹€μŠ΅ν•˜κΈ° 쒋은 온라인 μ‚¬μ΄νŠΈ List

    https://repl.it/languages/haskell

     

    그럼, λ°”λ‘œ μ‹œμž‘ν• κ²Œμš” :)

     

    Tuple (νŠœν”Œ)은 Listμ™€λŠ” λ‹€λ₯΄κ²Œ,

     

    1. 정해진 길이의 값을 λ³€κ²½ν•  수 μ—†λŠ”

    2. μ„œλ‘œ λ‹€λ₯Έ νƒ€μž…λ„ μ €μž₯ν•  수 μžˆλŠ”

     

    μžλ£Œν˜•μ΄μ—μš”.

     

    λ“€μ–΄μžˆλŠ” 자료 κ°―μˆ˜μ— λ”°λΌμ„œ 2κ°œλŠ” νŽ˜μ–΄(Pair), 3κ°œλŠ” νŠΈλ¦¬ν”Œ(Triple) μ΄λ ‡κ²Œ λΆ€λ₯΄κΈ°λ„ ν•œλ‹€λ„€μš”. νŽ˜μ–΄μ˜ κ²½μš°μ—λ§Œ λ™μž‘ν•˜λŠ” νŠΉμˆ˜ν•œ ν•¨μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. (fst, snd)

     

    μ •μ˜ν•˜κΈ°

    ( 2, "hello" ) //μ›ν•˜λŠ” λŒ€λ‘œ κ΄„ν˜Έ μ•ˆμ— , 둜 κ΅¬λΆ„ν•΄μ„œ λ„£μœΌλ©΄ λ©λ‹ˆλ‹€.

    (2, "γ…‡γ„Ήγ…‡γ„Ή", 'a') //μ„œλ‘œ λ‹€λ₯Έ 값이 λ“€μ–΄ 갈 수 μžˆμŠ΅λ‹ˆλ‹€. μ—¬λŸ¬ 개의 값을 넣을 수 μžˆμ–΄μš”!

     

    리슀트 λ‚΄μ—μ„œμ˜ νŠœν”Œ

     

    νŠœν”Œλ„ λ¦¬μŠ€νŠΈμ— 넣을 수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€λ§Œ! κ°―μˆ˜μ™€ νƒ€μž…μ˜ μˆœμ„œκ°€ μ™„μ „νžˆ λ™μΌν•΄μ•Όλ§Œ 같은 νŠœν”Œλ‘œ μ·¨κΈ‰λ©λ‹ˆλ‹€!

     

     


    [(1, "hi"), (2, "hello")] //OK!

    [(1, "hello"), (2, "hi",  3)] // ERROR! μ„œλ‘œ κ°―μˆ˜κ°€ λ‹€λ₯΄λ©΄ λ‹€λ₯Έ νƒ€μž…μ΄ λ˜μ–΄, λ¦¬μŠ€νŠΈμ— 듀어가지 μ•ŠμŠ΅λ‹ˆλ‹€.

     [("hi", 1), (1, "hi")] //ERROR! 값이 같더라도 μˆœμ„œκ°€ λ‹€λ₯΄λ©΄ λ‹€λ₯Έ νƒ€μž…μ΄ λ©λ‹ˆλ‹€.

     

    2개의 쌍인 경우만 λ™μž‘ν•˜λŠ” ν•¨μˆ˜

    fst, snd


    fst (2, "hello") //νŠœν”Œ(2쌍인 κ²½μš°μ—λ§Œ)의 첫 번째 μ›μ†Œ λ°˜ν™˜

    2

    snd (2, "hello")  //νŠœν”Œ(2쌍인 κ²½μš°μ—λ§Œ)의 2 번째 μ›μ†Œ λ°˜ν™˜

    "hello"

    fst (2, "hello", 33) //ERROR!

     

    μ›μ†Œμ˜ κ°œμˆ˜κ°€ 2κ°œκ°€ μ•„λ‹Œ νŠœν”Œμ—μ„œλŠ” fst, sndλŠ” μ—λŸ¬κ°€ λ‚©λ‹ˆλ‹€

     

    νŠœν”Œ λ‚΄μ˜ n번째 μ›μ†Œ κ°’ κ°€μ Έμ˜€κΈ° ??

     

    μ°Ύμ•„λ΄€μ§€λ§Œ ν”„λ ˆμž„μ›Œν¬ ν•¨μˆ˜λŠ” μ—†μ—ˆμŠ΅λ‹ˆλ‹€ (...ν˜Ήμ‹œ 있으면 λ§μ”€ν•΄μ£Όμ„Έμš” γ… .γ… ) 직접 ν•˜λ‚˜ λ§Œλ“€μ–΄μ€˜μ•Ό ν•΄μš”.

    그리고 λŒ€κ°œλŠ” μ›μ†Œ κ°œμˆ˜κ°€ 3개λ₯Ό λ„˜μ–΄κ°€λŠ” 큰 νŠœν”Œμ„ μ“°λŠ” 것을 ꢌμž₯ν•˜μ§€ μ•ŠλŠ” 것 κ°™μ•˜μŠ΅λ‹ˆλ‹€.

     

    νŒ¨ν„΄ 맀칭? μ΄λΌλŠ” λ°©λ²•μœΌλ‘œ κΈ‰ν•œ λΆˆμ€ 끌 수 μžˆλ‹€κ³  ν•˜λ„€μš”

    fst' (_, _, c) = c //tripleμ—μ„œ μ„Έλ²ˆμ§Έ μ›μ†Œ κ°€μ Έμ˜€κΈ°

    fst' (1,3,4)
    4

    좜처 : https://stackoverflow.com/questions/15558278/how-to-get-nth-element-from-a-10-tuple-in-haskell

     

    λ¨Έλ¦¬μ—μ„œ 김이 λ‚˜κΈ° μ‹œμž‘ν•˜λŠ”κ΅°μš”... ν›„μš°... 이제 μ‹œμž‘μΈλ° ν°μΌμ΄μ—μš”...

     

    zip 으둜 νŽ˜μ–΄ (2개 νŠœν”Œ) 리슀트 λ§Œλ“€κΈ°

    각 리슀트의 같은 μˆœμ„œμ˜ μ›μ†Œλ₯Ό 뽑아 νŽ˜μ–΄λ₯Ό λ§Œλ“€μ–΄μ€λ‹ˆλ‹€.

     

    zip 리슀트1 리슀트2

     

    zip [1,3,5,5] ["hello", "he", "llo", "hi", "hi2"]

    [(1,"hello"),(3,"he"),(5,"llo"),(5,"hi")] //ν•œ μͺ½μ΄ 더 κΈ΄ 경우 짧은 리슀트의 길이 만큼만 μƒμ„±λ©λ‹ˆλ‹€.

     

     

    list comprehension으둜 νŠœν”Œ λ§Œλ“€κΈ°

     

    list λ•Œ 처럼, list comprehension을 μ΄μš©ν•΄μ„œ νŠœν”Œλ“€μ„ λ§Œλ“€ 수 μžˆμ–΄μš”.

     

    [ (x, y, z) | x <- [1..10] , y <- [1..10], z<-[1..10]  , (x^2) + (y^2) == (z^2)]

    [(3,4,5),(4,3,5),(6,8,10),(8,6,10)]

    //ν•œ λ³€μ˜ 길이가 10 μ΄ν•˜μΈ 직각 μ‚Όκ°ν˜• κ΅¬ν•˜κΈ°

     

    μ—¬κΈ°κΉŒμ§€κ°€ ꡐ재의 1μž₯ λΆ€λΆ„μ΄μ—μš”! κΈ΄ κΈ€ μ½μ–΄μ£Όμ…”μ„œ μ˜€λŠ˜λ„ κ°μ‚¬ν•©λ‹ˆλ‹€ :)

     

    λ²Œμ¨λΆ€ν„° μ–΄λ €μ›Œμ§€κΈ° μ‹œμž‘ν•©λ‹ˆλ‹€γ…‹γ…‹γ…‹γ…‹ ν•¨μˆ˜λ₯Ό N번 λ°˜λ³΅ν•˜λŠ” 방법등이 아직은 책에 λ“±μž₯ν•˜μ§€ μ•Šμ•„μ„œ λ¨Όμ € 찾아보고 그러고 μžˆλŠ”λ°, ν™•μ‹€νžˆ κ°œλ…μ΄ μƒμ†Œν•΄μš” γ… .γ…  μ΅μˆ™ν•˜μ§„ μ•Šμ§€λ§Œ μ΄λ ‡κ²Œ ν•˜λ‚˜ν•˜λ‚˜ μ•Œμ•„κ°€λ‹€ 보면 λ­”κ°€ κΉ¨λ‹¬μŒμ„ 얻지 μ•Šμ„κΉŒ ν•΄μš”...

     

    μ œκ°€ 이 책을 끝낼 수 있으면 μ’‹κ² μŠ΅λ‹ˆλ‹€!! γ… γ… 

    λŒ“κΈ€

Designed by Tistory. @Bola Kim