수색…


비고

대부분의 하스켈 함수는 함수 이름 뒤에 인수 (접두사 표기법)가 붙는 방식으로 호출됩니다. (+)와 같은 두 개의 인수를 허용하는 함수의 경우, 함수 전후에 인수를 제공하는 것이 의미가 있습니다 (중위).

전주곡

논리적 인

&& 는 논리적 AND이고, || 논리 OR입니다.

== 평등, /= 같지 않음, < / <= 보다 작음 및 > / >= 더 큰 연산자.

산술 연산자

숫자 연산자 + , -/ 는 예상대로 크게 작용합니다. (분수는 반올림 문제를 피하기 위해 분수로만 작동합니다 - 정수 나누기는 quot 또는 div 로 수행해야합니다). 하스켈의 세 가지 누산 연산자는 좀더 드문 경우입니다.

  • ^ 는 모든 숫자 유형의 기본을 음수가 아닌 정수로 취합니다. 이것은 ( 빠른 ) 반복 곱셈에 의해 간단하게 작동합니다. 예 :

    4^5  ≡  (4*4)*(4*4)*4
    
  • ^^ 는 긍정적 인 경우에도 똑같지 만 부정적인 지수의 경우에도 작동합니다. 예 :

    3^^(-2)  ≡  1 / (2*2)
    

    ^ 와는 달리 이것은 부분 기본 형식을 필요로합니다 (예 : 4^^5 :: Int 는 작동하지 않고 4^5 :: Int 또는 4^^5 :: Rational ).

  • ** 실제 지수를 구현합니다. 이는 매우 일반적인 논증에 대해서는 효과적이지만 ^ 또는 ^^ 보다 더 많은 비용이 들며 일반적으로 작은 부동 소수점 오류가 발생합니다.

    2**pi  ≡  exp (pi * log 2)
    

기울기

두 개의 연결 연산자가 있습니다.

  • : ( cons cons pron )는 목록 앞에 단일 인수를 앞에 붙입니다. 이 연산자는 실제로 생성자이므로 목록을 패턴 일치 ( "역 구성")하는 데 사용할 수도 있습니다.

  • ++ 전체 목록을 연결합니다.

    [1,2] ++ [3,4]  ≡  1 : 2 : [3,4]  ≡  1 : [2,3,4]  ≡  [1,2,3,4]
    

!! 인덱싱 연산자입니다.

[0, 10, 20, 30, 40] !! 3  ≡  30

그 색인 목록을 참고 비효율적 인 (대신에 O (1)의 N 복잡도 O ()는 배열 또는에 대한 O (N 로그) 지도 ); 일반적으로 하스켈에서는 색인 대신에 패턴 매칭을 접어서리스트를 해체하는 것이 바람직하다.

제어 흐름

  • $ 는 함수 응용 연산자입니다.

    f $ x  ≡  f x
           ≡  f(x)  -- disapproved style
    

    이 연산자는 주로 괄호를 피하는 데 사용됩니다. 또한 엄격한 버전 $! 함수를 적용하기 전에 인수를 평가하도록합니다.

  • . 함수를 구성합니다.

    (f . g) x  ≡  f (g x)  ≡  f $ g x
    
  • >> 시퀀스 모나드 동작. 예 : writeFile "foo.txt" "bla" >> putStrLn "Done." 먼저 파일에 쓰고 화면에 메시지를 인쇄합니다.

  • >>= 동일한 작업을 수행하는 동시에 첫 번째 작업에서 다음 작업으로 전달할 인수를 수락합니다. readLn >>= \x -> print (x^2) 는 사용자가 숫자를 입력 할 때까지 기다린 다음 해당 숫자의 제곱을 화면에 출력합니다.

사용자 지정 연산자

Haskell에서는 원하는 중위 연산자를 정의 할 수 있습니다. 예를 들어, 목록 엔벌 로프 연산자를 다음과 같이 정의 할 수 있습니다.

(>+<) :: [a] -> [a] -> [a]
env >+< l = env ++ l ++ env

GHCi> "**">+<"emphasis"
"**emphasis**"

이러한 연산자에 항상 고정 선언문을 제공해야합니다.

infixr 5 >+<

( >+<++: do와 같이 단단히 묶음)을 의미합니다.

삽입 연산자에 대한 정보 찾기

삽입은 Haskell에서 매우 흔히 사용되기 때문에 정기적으로 서명 등을 찾아야합니다. 다행히도 이것은 다른 모든 함수만큼 쉽습니다.

  • 하스켈 검색 엔진 인 HayooHoogle 은 중위 연산자에 사용할 수 있습니다. 예를 들어 어떤 라이브러리에 정의되어있는 것과 같은 것입니다.

  • GHCi 또는 IHaskell에서는 :i:t ( i nfo 및 t ype) 지시어를 사용하여 연산자의 기본 속성을 학습 할 수 있습니다. 예를 들어,

    Prelude> :i +
    class Num a where
      (+) :: a -> a -> a
      ...
          -- Defined in ‘GHC.Num’
    infixl 6 +
    Prelude> :i ^^
    (^^) :: (Fractional a, Integral b) => a -> b -> a
          -- Defined in ‘GHC.Real’
    infixr 8 ^^
    

    이것은 ^^+ 보다 더 단단히 바인딩된다는 것을 나에게 알려주고, 둘 다 숫자 형을 요소로 사용하지만, ^^ 는 지수가 필수이고 밑은 소수가되어야합니다.
    덜 장황하다 :t 괄호 안에 연산자가 필요하다.

    Prelude> :t (==)
    (==) :: Eq a => a -> a -> Bool
    


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow