연습으로 나는 서곡의 흥미로운 부분을 수동으로 구현하려고합니다. 내가 포인트 무료로 갈 기회가있을 때마다 나는 그것을 가져 간다. 그러나 이것은 가장 가능성이 희박한 장소에서 벽돌 벽으로 나를 이끌었습니다. 이 코드 사용 :GHCI가 기능 점수를 무료로 쓰려고 시도하지 않았습니다.
myelem _ [] = False
myelem x y = if x == head y then True else myelem x (tail y)
notElem
을 구현하려고합니다. 내 시도는 다음과 같습니다.
-- First
mynotelem = not myelem
일치하지 않는 유형으로 인해 부 풀릴 수 있습니다. 이것은 쉽게 해결되었습니다
-- Second
mynotelem x y = not (myelem x y)
인수 x와 y의 명시 적 선언이 추한 불필요한 느낌 그러나, 그래서 내가 다시 점 자유로운 스타일로 그것을 얻을하려고합니다. 제법
Couldn't match expected type `Bool'
with actual type `a0 -> [a0] -> Bool'
In the second argument of `($)', namely `myelem'
In the expression: not $ myelem
In an equation for `mynotelem': mynotelem = not $ myelem
실패
-- Third
mynotelem = not $ myelem
는 종류가 여전히 일치하지 않습니다. 근데 어떻게 고쳐? 다시 똑바로 점프 할 수 있습니다.
-- Fourth
mynotelem x y = not $ myelem x y
다음 중 어떤 기능이 작동하지만 위험한 부분은 서클에 가깝습니다. 나는 그것이 인수 중 하나 제거하는 것이 가능하다 발견 :
-- Fifth
mynotelem x = not . (myelem x)
하지만 성가신 X는 여전히 남아있다. 어떻게 제거합니까?
mynotelem x = not . (myelem x)
= (not .) (myelem x)
지금이 f = (not .)
와 g = myelem
그냥 h x = f (g x)
임을 인식, 그래서 우리는 지적이없는 h = f . g
로 (.)
연산자의 또 다른 용도로 쓸 수 있습니다 :
ThelronKnuckle : 더 인수
, 패턴은 다음과 같이 계속 당신의 천국하는 경우 이미'($)'와'(.)'의 차이에 관한 질문을 검색하면 도움이 될 것입니다. –