하스켈에서 간단한 평균 함수를 개발하려고합니다. 이 작동하는 것 같다 :하스켈 도트 연산자
lst = [1, 3]
x = fromIntegral (sum lst)
y = fromIntegral(length lst)
z = x/y
을 왜 다음 버전 작업을하지 않는 이유는 무엇입니까?
lst = [1, 3]
x = fromIntegral.sum lst
y = fromIntegral.length lst
z = x/y
하스켈에서 간단한 평균 함수를 개발하려고합니다. 이 작동하는 것 같다 :하스켈 도트 연산자
lst = [1, 3]
x = fromIntegral (sum lst)
y = fromIntegral(length lst)
z = x/y
을 왜 다음 버전 작업을하지 않는 이유는 무엇입니까?
lst = [1, 3]
x = fromIntegral.sum lst
y = fromIntegral.length lst
z = x/y
연산자에 대한 haskell의 우선 순위 규칙이 혼란스러워지고 있습니다. 혼란 스럽습니다.
당신은
x = fromIntegral.sum lst
하스켈이보고 쓸 때와 동일로 : 당신이 쓰는 무엇을 의미
x = fromIntegral.(sum lst)
했다 :
x = (fromIntegral.sum) lst
.
(조성물) 따라서
fromIntegral.sum lst
가 sum lst
가 기능하지 않기 때문에 잘못
fromIntegral . (sum lst)
로 해석 기능 애플리케이션보다 낮은 우선 순위를 갖는다.
난 그냥 "를 추가하고 싶었 구조에 $ ":
x = fromIntegral $ sum lst
y = fromIntegral $ length lst
가장 낮은 우선 순위를 가지며 너무 많은 괄호 레벨을 피할 수 있습니다. (.)와는 달리, 함수 합성을하지 않고, 오른쪽 인수를 평가하여 왼쪽 함수에 전달합니다.
($) :: (a -> b) -> a -> b
(.) :: (b -> c) -> (a -> b) -> a -> c
그리고'x = fromIntegral '이라고 쓸 수도 있습니다. 합계 $ lst'는 OP가 원래 시도한 것과 더 가깝습니다. – yatima2975
오른쪽 인수를 평가한다고 말하는 것이 정확하지 않습니다. 평가는 여전히 게으르다. 인수를 평가하려면 대신'$!'가 필요합니다. – Chuck
이 솔루션이 효과가 있긴하지만 여기서 올바른 대답이라고 생각하지 않습니다. 나에게 그것은 OP가 운영자 우선 순위에 대해 혼란스러워하는 것 같다. 그러면 올바른 답을 표시하고 여기에서 괄호가 도움이된다는 것을 지적하는 것입니다. 아직 다른 연산자를 소개하지 않습니다. – Martijn
그리고 당신은 평균을 계산하고 있기 때문에, http://stackoverflow.com/questions/2376981/haskell-types-frustrating-a-simple-average-function/2380437을 읽어보십시오 유형은 모두를 말한다 # 2380437. – kennytm