Haskell Language
중립 연산자
수색…
비고
대부분의 하스켈 함수는 함수 이름 뒤에 인수 (접두사 표기법)가 붙는 방식으로 호출됩니다. (+)와 같은 두 개의 인수를 허용하는 함수의 경우, 함수 전후에 인수를 제공하는 것이 의미가 있습니다 (중위).
전주곡
논리적 인
==
평등, /=
같지 않음, <
/ <=
보다 작음 및 >
/ >=
더 큰 연산자.
산술 연산자
숫자 연산자 +
, -
및 /
는 예상대로 크게 작용합니다. (분수는 반올림 문제를 피하기 위해 분수로만 작동합니다 - 정수 나누기는 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에서 매우 흔히 사용되기 때문에 정기적으로 서명 등을 찾아야합니다. 다행히도 이것은 다른 모든 함수만큼 쉽습니다.
하스켈 검색 엔진 인 Hayoo 와 Hoogle 은 중위 연산자에 사용할 수 있습니다. 예를 들어 어떤 라이브러리에 정의되어있는 것과 같은 것입니다.
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