Ponto de estilo livre em haskell
Pergunta
Eu estou tentando mudar
function (x:xs) = unwords (map reverse (words (x:xs)))
no ponto em estilo livre, e eu não posso fazer isso.
não é simplesmente
function = unwords . map . reverse . words
Por favor, ajuda-me a mudar este ponto de free style.
Eu tentei usar pointfree depois de fazer abaixo de linha de comando
cabal install pointfree
Tudo compilado e instalado, mas quando eu digito pointfree no terminal, ele sempre dizendo que não há nenhuma tal coisa.
Solução
Sua definição é quase correto e pode ser testado no ghci intérprete, deve ser
ghci> let function = unwords . map reverse . words
ghci> function "The quick brown fox"
"ehT kciuq nworb xof"
porque reverse
é um argumento do mapa.Basicamente, para alterar pipeline-como função de foo a3 = f a1 (g a2 (h a3))
(consistindo de chamadas de função aninhada) em pointfree, onde explicita o argumento (a3
neste caso) é a última chamada, você precisará removê-lo e substituir parênteses aninhados com .
composição do operador: foo = f a1 . g a2 . h
.No entanto, esse truque não funciona quando há vários argumentos ou o argumento é usado mais de uma vez.Para meaningly operar com pointfree funções, você deve entender
combinatória lógica.
EDITAR:oh, eu tenho o que você tentou usar a linha de comando pointfree ferramenta a auto-transformar a função.Binários compilados com cabal são colocados no diretório específico (por exemplo, C:\Users\Username\AppData oaming\cabal\bin no Windows, AFAIR), o que, provavelmente não é adicionado ao CAMINHO por padrão e por isso interpretador de linha de comando não pode encontrar o arquivo executável.
Outras dicas
reverse
é um argumento de map
, assim , você não tem para compor map
com reverse
, mas você deseja para compor o pleno map reverse
com as outras funções.
A maneira correta de fazer isso é:
function = unwords . map reverse . words