Menurut pemahaman saya, fungsi parsial adalah fungsi yang kita dapatkan dengan melewatkan lebih sedikit parameter ke fungsi daripada yang diharapkan. Misalnya, jika ini secara langsung valid dengan Python:
>>> def add(x,y):
... return x+y
...
>>> new_function = add(1)
>>> new_function(2)
3
Dalam cuplikan di atas, new_function
adalah fungsi parsial. Namun, menurut Haskell Wiki , definisi fungsi parsial adalah
Fungsi parsial adalah fungsi yang tidak didefinisikan untuk semua argumen yang mungkin dari tipe yang ditentukan.
jadi, pertanyaan saya adalah: apa sebenarnya yang dimaksud dengan "fungsi parsial"?
python
haskell
functional-programming
partial-application
partial-functions
Saurabh kukade
sumber
sumber
partial
melakukan aplikasi parsial , sedangkan Haskell melakukannya secara otomatis. Entri wiki mengacu pada fungsi parsial , yang merupakan istilah dari matematika.add 3 5
bukan aplikasi fungsi tunggal. Ini berlaku pertamaadd
untuk 3 untuk mendapatkan fungsi baru, yang kemudian diterapkan ke 5.partial
metode adalah deklarasi maju dari metode pribadi yang diimplementasikan secara opsional di tempat lain dalam basis kode proyek.new_function = functools.partial(add, 1)
Jawaban:
Anda di sini membingungkan dua konsep. Sebuah sebagian diterapkan fungsi [Haskell-wiki] dengan fungsi parsial [Haskell-wiki] .
Fungsi yang diterapkan sebagian adalah:
sedangkan fungsi parsial memang adalah fungsi non-total:
sumber
Fungsi parsial (baik dalam konteks pemrograman fungsional dan matematika) persis seperti yang dikatakan wiki: fungsi yang tidak didefinisikan untuk semua argumen yang mungkin. Dalam konteks pemrograman, kami biasanya mengartikan "tidak didefinisikan" sebagai salah satu dari beberapa hal, termasuk perilaku yang tidak terdefinisi, pengecualian atau non-terminasi.
Contoh dari fungsi parsial adalah pembagian integer, yang tidak didefinisikan jika pembagi adalah 0 (dalam Haskell akan menimbulkan kesalahan).
Kode itu hanya akan menyebabkan kesalahan dalam Python, tetapi jika itu berfungsi seperti yang Anda inginkan, itu akan menjadi fungsi total (artinya tidak parsial).
Seperti yang sudah ditunjukkan oleh para komentator, Anda kemungkinan besar memikirkan fakta bahwa itu akan berfungsi sebagian .
sumber
Jawabannya menjelaskan semua, saya hanya akan menambahkan satu contoh di setiap bahasa:
ini bukan fungsi parsial atau fungsi kari , ini hanya fungsi yang Anda tidak memberikan semua argumennya .
Fungsi kari dalam python harus seperti ini:
dan di haskell:
Fungsi parsial dalam python:
Dan di Haskell, saat tautan Anda muncul:
Yah, pada dasarnya yang sebaliknya: ini adalah fungsi yang akan bekerja untuk input apa pun dari jenis itu. Berikut ini adalah contoh dalam python:
dan ini berfungsi bahkan untuk daftar tak terbatas, jika Anda menggunakan sedikit trik:
Dan yang setara dalam Haskell:
Di sini fungsinya tidak menggantung selamanya. Konsepnya sama: untuk setiap daftar fungsi akan bekerja.
sumber