2014-11-21 4 views
6

는 중위 사용하는 기능을 감안할 때 :`flip` 인수

인수는 도우미 함수 정의하여 이성을 상실 할 수있다
let f a b = (a+10, b) 
f 4 5 
=> (14,5) 
4 `f` 5 
=> (14,5) 

:

let g = flip f 
4 `g` 5 
=> (15,4) 

는이 인라인을 할 수 있나요을 ?

4 `flip f` 5 
=> parse error on input `f' 
4 `(flip f)` 5 
=> parse error on input `(' 

내 사용 사례 Control.Arrow.first입니다. 대신

(+10) `first` (7,8) 
(17,8) 

의 나는 HaskellWiki article on infix operators에 설명 된대로

let forwardFirst = flip first 
+1

당신의 이미'g'를 정의 했으므로 이것을 원한다면 사용 케이스를 사용 하시겠습니까? –

+2

유스 케이스를 추가했습니다. :) –

+1

이 질문에 대한 직접적인 대답은 아니지만 렌즈를 사용하여'(7,8) & _1 % ~ (+10) '으로 작성할 수 있습니다. 물론,'&'를 사용하여'(7,8) & first (+10)'로 쓸 수 있습니다. 이게 너가 원하는 것과 비슷한거야? – snak

답변

1

쓸 필요없이

(7,8) `forwardFirst` (+10) 

같은 미래 응용 프로그램 스타일 솔루션을 선호

당신은 오직 보통 일을 할 수 있음에 유의하십시오. 두 개의 인수를 취하는 함수를 사용합니다. 사실, 두 개 이상의 인수를 복용 함수, 당신은 그것을 할 수 있지만이 같은 것입니다 귀하의 경우이 작업을 수행하는 방법을

에게 거의 좋은 아니다 :

은 무엇입니까
let f a b = (a+10, b) 
let h a b = (f `flip` a) b 
let a = 3 
let b = 2 
f a b = (13,2) 
a `h` b = (12,3) 
+0

'g = flip f'와'h a b = (f 'flip'a) b' 두 함수는 동일합니다. 더 복잡한 버전 인'h'의 이점은 어디에 있습니까? –

+0

공정한 포인트. 나는 당신이 원하는 것을 할 수있는 더 좋은 방법이 있는지 정말로 확신하지 못합니다. –