2017-01-23 3 views
2

하스켈에서 일부 기능의 응용 프로그램 :방법으로 나는 다음과 같은 유효한 함수 정의 단축 할 부분 응용 프로그램을 사용하려고

ltest50 = take 50 (iterate ltestonce) 

또는

ltest50 = take 50 (iterate ltestonce$) 
: 내가 좋아하는 뭔가를 생각

ltest50 n = take 50 (iterate ltestonce n) 

트릭을 할 수 있지만 기쁨은 없습니다. 하스켈에서 이것을하는 가장 좋은 방법은 무엇입니까?

ltest50 n = take 50 (iterate ltestonce n) 

은 동등하다 :

+2

여기에 haskell wiki [page] (https://wiki.haskell.org/Pointfree)가 있다는 것을 알고 싶을 것입니다. – wizzup

답변

4

하스켈은 "도트 연산자"또는 "기능 조성물"이것 (.) :: (b -> c) -> (a -> b) -> a -> c 갖는다

:

ltest50 = take 50 . iterate ltestonce 

(.)를로 정의

(.) :: (b -> c) -> (a -> b) -> a -> c 
(.) f g x = f (g x) 
,

또는 약간 짧다는 그래서 중위 연산자 .로서 사용될 수있는 수단을 괄호 사이에 배치 된 심볼이기 때문에

(.) :: (b -> c) -> (a -> b) -> a -> c 
(.) f g x = f $ g x 

:

ltest50 = take 50 . iterate ltestonce 

인은 "구문 설탕

ltest50 = (.) (take 50) (iterate ltestonce) 

는 적어도 플랑드르 (벨기에의 네덜란드어 부분)의 운영자가 때로는 비공식적 인 : 대한 " 변수에 g을 적용한 후에 f을 적용하기 때문에 "after"라고합니다.

관련 문제