2013-12-23 1 views
0
나는 위의 플립에서 그 물어보고 싶은
flip' :: (a -> b -> c) -> (b -> a -> c) 
flip' f = g 
    where g x y = f y x 

"에서하스켈 플립 시뮬레이션 문제

그러나 함수 이름을 g 및 GXY 점유율 FYX와 같은 값을 반환합니다 '기능을, 그 플립 보인다' gxy = fyx "이면 fyx는 함수 호출이고 값을 반환 할 것이고 gxy는 값을 반환 할 것이므로"where v2 = v1 "이라는 말이 맞습니까?

나는 코드가 작동 할 것이라는 것을 알고 있지만, 이것이 일어나는 방법에 대해 더 알고 싶다.

누구나 아이디어가 있습니까? where g x y = f y x 당신에게

+0

"g x y = f y x"가 g의 함수 정의를 의미하는 경우 다음 코드가 작동하는 이유는 무엇입니까? 'fxy'가 값이지만 반환 유형이 함수 여야하기 때문에 'flip':: :: (a -> b -> c) -> b -> a -> c flip 'fyx = fxy – user3129535

+1

이유가 없습니다. 누구나'flip 'f = \ xy -> fyx'보다는 그것을 정의 할 것입니다 (당신이 아주 명료하게되고 싶다면). – augustss

답변

4

너무 감사 g x y 매개 변수 xy와 함수 호출 g 없습니다. 함수 g은 2 개의 인수 xy을 사용하고 평가는 f y x을 사용하는 함수로 선언되었습니다.

flip' 주어진 함수는 f이고 2 개의 인수를 취하면 g이됩니다. g 자체는 f을 호출하기 위해 두 개의 인수를 스와핑하는 것으로 정의됩니다.

+0

도와 주셔서 감사합니다. fxy가 값이기 때문에 반환 형식이 함수 여야합니다. – user3129535

+1

@ user3129535 때문에이 코드 플립 ':: a -> b -> c -> b -> a -> c flip'fyx = '= '를 과제로 생각해서는 안됩니다. 그것은 정의입니다. 'flip f y x = f x y'는'def flip (f, y, x) : f (x, y)'를 명령형으로 반환합니다. '= '의 오른쪽은 표현식이고, 왼쪽은 함수의'flip' 매개 변수의 * 선언 *입니다. – Bakuriu

+0

@ user3129535 같은 것은 아닙니다. 이 경우'flip ':: (a -> b -> c) -> b -> a -> c'함수는'a -> b -> c' 'a'는 값'c'를 반환합니다. 귀하의 질문에, 당신은 함수'(a -> b -> c)'를 반환하고 함수'(b -> a -> c)'를 반환하는 함수에 대해 이야기하고있었습니다. – Johan