함수를 표현할 수있는 가장 짧은 방법은 무엇입니까
f(a,b)(c,d)=(a+c,b+d)
포인트 프리 표기법으로?
pointfree.io 는 우리에게 제공
uncurry (flip flip snd . (ap .) . flip flip fst . ((.) .) . (. (+)) . flip . (((.) . (,)) .) . (+))
약간의 작업으로 단축 할 수 있습니다
uncurry$(`flip`snd).((<*>).).(`flip`fst).((.).).(.(+)).flip.(((.).(,)).).(+)
76 바이트 그러나 이것은 여전히 보인다 정말 길고 복잡한 같은 간단한 작업. 더 짧은 point-free 함수로 pairwise add를 표현할 수있는 방법이 있습니까?
포인트 프리라는 의미로 분명히하기 위해, 포인트 프리 함수 선언은 기존 함수와 연산자를 가져 와서 원하는 함수가 생성되는 방식으로 서로 적용하는 것을 포함합니다. 역 따옴표, 괄호 리터럴 값 ( []
, 0
, [1..3]
, 등)은 허용하지만, 같은 키워드 있습니다 where
와는 let
없습니다. 이것은 다음을 의미합니다.
변수 / 함수를 할당 할 수 없습니다
람다를 사용할 수 없습니다
수입하지 않을 수 있습니다
(+)***(+)
입니다. 그렇지 않으면 해결책이 될 것 입니다.
(+)<$>([1],2)<*>([3],4)
제공합니다 ([1,3],6)
.