De acordo com meu entendimento, funções parciais são funções que obtemos ao passar menos parâmetros para uma função do que o esperado. Por exemplo, se isso fosse diretamente válido em Python:
>>> def add(x,y):
... return x+y
...
>>> new_function = add(1)
>>> new_function(2)
3
No trecho de código acima, new_function
é uma função parcial. No entanto, de acordo com o Wiki de Haskell , a definição de função parcial é
Uma função parcial é uma função que não está definida para todos os argumentos possíveis do tipo especificado.
então, minha pergunta é: o que exatamente se entende por "função parcial"?
python
haskell
functional-programming
partial-application
partial-functions
Saurabh kukade
fonte
fonte
partial
realiza aplicação parcial , enquanto o Haskell faz isso automaticamente. A entrada wiki refere-se a funções parciais , que é um termo da matemática.add 3 5
não é um aplicativo de função única. Este primeiro aplica-seadd
a 3 para obter uma nova função, que é então aplicada a 5.partial
método é uma declaração direta de um método privado opcionalmente implementado em outra parte da base de código do projeto.new_function = functools.partial(add, 1)
Respostas:
Você está aqui confundindo dois conceitos. Uma função parcialmente aplicada [haskell-wiki] com uma função parcial [haskell-wiki] .
Uma função parcialmente aplicada é:
considerando que uma função parcial é de fato uma função não total:
fonte
Uma função parcial (tanto no contexto da programação funcional quanto da matemática) é exatamente o que o wiki diz: uma função não definida para todos os seus argumentos possíveis. No contexto da programação, geralmente interpretamos "não definido" como uma das várias coisas, incluindo comportamento indefinido, exceções ou não-encerramento.
Um exemplo de uma função parcial seria a divisão inteira, que não é definida se o divisor for 0 (em Haskell, ocorrerá um erro).
Esse código simplesmente causaria um erro no Python, mas se funcionasse como você pretendia, seria uma função total (ou seja, não parcial).
Como os comentaristas já apontaram, é mais provável que você pense no fato de que seria uma função parcialmente aplicada .
fonte
As respostas explicam tudo, vou apenas adicionar um exemplo em cada idioma:
isso não é uma função parcial nem uma função ao curry , é apenas uma função que você não forneceu todos os seus argumentos .
Uma função ao curry em python deve ser assim:
e em haskell:
Uma função parcial em python:
E em Haskell, como o seu link apareceu:
Bem, basicamente o oposto: esta é uma função que funcionará para qualquer entrada desse tipo. Aqui está um exemplo em python:
e isso funciona mesmo para listas infinitas, se você usar um pequeno truque:
E o equivalente em Haskell:
Aqui as funções não ficam para sempre. O conceito é o mesmo: para cada lista a função funcionará.
fonte