문제

나는 변화하려고 노력하고있다

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 기능으로 의미있게 작동하려면 이해해야합니다. 조합 논리 .

편집 : 오, 명령 줄 pointfree 도구 기능을 자동으로 변환합니다. Cabal과 컴파일 된 바이너리는 특정 디렉토리 (예 : Windows, Afair의 C : \ Users \ Username \ AppData \ Roaming \ Cabal \ Bin)가 기본적으로 경로에 추가되지 않고 명령 줄 인터프리터가 ' t 실행 파일을 찾습니다.

다른 팁

reverse 의 주장이다 map, 따라서 작성할 필요가 없습니다. map ~와 함께 reverse, 하지만 전체 내용을 작성하고 싶은 경우 map reverse 다른 기능으로.

올바른 방법은 다음과 같습니다.

function = unwords . map reverse . words
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top