Frasa yang saya perhatikan baru-baru ini adalah konsep gaya "tanpa titik" ...
Pertama, ada pertanyaan ini , dan juga pertanyaan ini .
Kemudian, saya menemukan di sini mereka menyebutkan "Topik lain yang mungkin layak untuk didiskusikan adalah ketidaksukaan penulis terhadap gaya bebas poin."
Apa itu gaya "point free"? Bisakah seseorang memberikan penjelasan yang ringkas? Apakah ini ada hubungannya dengan kari "otomatis"?
Untuk mengetahui level saya - Saya telah belajar sendiri Skema, dan telah menulis juru bahasa Skema sederhana ... Saya mengerti apa itu kari "implisit", tetapi saya tidak tahu Haskell atau ML apa pun.
functional-programming
coding-style
scheme
pointfree
Paul Hollingsworth
sumber
sumber
Jawaban:
Lihat saja artikel Wikipedia untuk mendapatkan definisi Anda:
Contoh Haskell:
Konvensional (Anda menentukan argumen secara eksplisit):
Tanpa poin (
sum
tidak memiliki argumen eksplisit - ini hanya lipatan dengan+
memulai dengan 0):Atau bahkan lebih sederhana: Daripada
g(x) = f(x)
, Anda bisa menulisg = f
.Jadi ya: Ini terkait erat dengan kari (atau operasi seperti komposisi fungsi).
sumber
sum (x:xs) ...
bukansum sum (x:xs) ...
?Gaya tanpa titik berarti argumen dari fungsi yang sedang didefinisikan tidak disebutkan secara eksplisit, bahwa fungsi tersebut ditentukan melalui komposisi fungsi.
Jika Anda memiliki dua fungsi, seperti
dan jika Anda ingin menggabungkan dua fungsi ini menjadi satu fungsi yang menghitung
x*x+1
, Anda dapat mendefinisikannya "point-full" seperti ini:Alternatif tanpa tujuan adalah tidak membicarakan argumen
x
:sumber
Contoh JavaScript:
Referensi
sumber
Gaya bebas titik berarti bahwa kode tidak secara eksplisit menyebutkan argumennya, meskipun argumen itu ada dan sedang digunakan.
Ini berfungsi di Haskell karena cara kerja fungsi.
Misalnya:
mengembalikan fungsi yang membutuhkan satu argumen, oleh karena itu tidak ada alasan untuk mengetik argumen secara eksplisit kecuali Anda ingin juga.
sumber
myShow = show
. Ada lebih banyak tentang itu di wiki HaskellBerikut ini satu contoh di TypeScript tanpa pustaka lain:
Anda dapat melihat gaya tanpa poin lebih "lancar" dan lebih mudah dibaca.
sumber
this.moreThan(10)
bukan fungsi bernama, ini adalah fungsi kari serta fungsi yang secara implisit (jadi titik gratis) mengambiltransaction
sebagai inputnya.