문제
나는 변화하려고 노력하고있다
function (x:xs) = unwords (map reverse (words (x:xs)))
포인트 프리 스타일로 하는데 저는 이것을 할 수 없습니다.
단순히 그렇지 않은가?
function = unwords . map . reverse . words
이것을 포인트 프리 스타일로 변경하도록 도와주세요.
아래 명령줄을 수행한 후 pointfree를 사용하려고 했습니다.
cabal install pointfree
모든 것이 컴파일되고 설치되었지만 터미널에 pointfree를 입력하면 그런 것이 없다고 계속해서 나타납니다.
해결책
귀하의 정의는 거의 정확하며 GHCI 통역사에서 테스트 할 수 있으며
ghci> let function = unwords . map reverse . words
ghci> function "The quick brown fox"
"ehT kciuq nworb xof"
.
reverse
가지도의 인수이기 때문에. 기본적으로 PointFree (중첩 함수 호출로 구성된) PointFree에 Pipeline과 같은 함수를 변경하려면 PointFree에 명시 적 인수 (이 경우 foo a3 = f a1 (g a2 (h a3))
)가 마지막이라는 이름으로 삭제하고 중첩 된 괄호를 a3
컴포지션 연산자로 바꿔야합니다. .
. 그러나 여러 인수가있는 경우이 트릭이 작동하지 않거나 인수가 두 번 이상 사용됩니다. Pointfree 기능으로 의미있게 작동하려면 이해해야합니다.
조합 논리 .
다른 팁
reverse
의 주장이다 map
, 따라서 작성할 필요가 없습니다. map
~와 함께 reverse
, 하지만 전체 내용을 작성하고 싶은 경우 map reverse
다른 기능으로.
올바른 방법은 다음과 같습니다.
function = unwords . map reverse . words
제휴하지 않습니다 StackOverflow