Dalam tatanan fungsi yang lebih tinggi lipat / perkecil apa namanya, jika ada, argumen fungsional?
Saya sedang mengerjakan perpustakaan pemrosesan tabel monadik tempat baris dilipat untuk menghasilkan analisis sederhana (seperti menemukan minimum, maksimum, rata-rata kolom). Oleh karena itu saya mencari nama yang tepat untuk argumen fold
fungsi dan nama apa pun yang sudah mapan di komunitas ML (atau Haskell atau Common Lisp sebagai kandidat kedua dan ketiga) akan menarik.
Nama seperti f
umum dalam deskripsi fold
fungsi, namun tidak deskriptif dan kata benda akan lebih cocok.
terminology
functional-programming
naming
pengguna40989
sumber
sumber
fold
adalah fungsi urutan yang lebih tinggi. Argumen untuk dilipat adalah hanya itu, sebuah argumenJawaban:
Saya tidak tahu apakah ada satu jawaban untuk ini, seperti yang disebutkan @jozefg. Dan murni dari spekulasi, inilah satu penjelasan yang mungkin:
Saya menduga alasannya adalah karena jenis -
(a -> b -> b)
dalam Haskellfoldr
, misalnya - lebih bermakna daripada nama apa pun yang muncul. Karena parametera
danb
ketik bisa apa saja , fungsinya bisa melakukan apa saja juga. Jadi kau pergi dengan nama-nama sepertifunction
,combiner
,morphism
, danargument
, yang tidak sangat berarti baik. Mungkin juga menggunakan nama pendek, tidak mengganggu.Contoh lain adalah
id :: a -> a
fungsinya: apa yang harus Anda sebut argumennya? Sekali lagi, saya pikirid
tipe ini lebih deskriptif daripada nama argumennya.Namun, saya setuju dengan Anda - sepertinya harus ada nama umum, mungkin dalam matematika. Saya harap seseorang dapat memperbaiki saya dalam hal ini.
Beberapa contoh namanya dalam kode nyata:
Di perpustakaan Haskell , sebagian besar disebut
f
(dan kadang-kadangoperator
di komentar):Itu juga disebut
f
dalam Clojure :sumber
Saya tidak setuju dengan gagasan yang
f
merupakan nama buruk untuk argumen fungsifold
. Alasan kami menginginkan nama deskriptif dalam pemrograman adalah agar kami tahu apa yang digambarkan oleh namanya, dan namaf
tersebut biasa digunakan dalam matematika (dan bahasa pemrograman fungsional) untuk suatu fungsi (sebagaimana adanyag
danh
).Kita hampir tidak tahu apa-apa tentang
f
(dengan desain, karena jika kita bisa lebih spesifik tentang itu, kita tidak bisa menggunakanfold
banyak hal), dan namanyaf
memberi tahu kita segala yang perlu kita ketahui, kecuali bahwa itu adalah fungsi dari dua argumen. Namaf
ini sangat mirip dengan kata ganti 'it' dalam bahasa Inggris - itu adalah penampung yang bisa berarti hampir apa saja. Kita tidak tahu apa itu 'sampai kita menggunakannya dalam kalimat, dan kita tidak tahu apaf
itu sampai kita memanggilnyafold
.Saat memberi nama, kami ingin mendapatkan informasi sebanyak mungkin dari nama itu, dan kami lebih suka nama itu singkat (jika kami bisa mendapatkan itu tanpa mengorbankan informasi penting). Di sini, kami memiliki nama yang sangat pendek yang memberi tahu kami hampir semua yang kami ketahui tentangnya. Saya tidak berpikir itu bisa diperbaiki.
Dalam pemrograman imperatif,
i
digunakan sebagai penghitung lingkaran (sebagaimana adanyaj
dank
, jika kita membutuhkan lebih banyak); dalam pemrograman fungsional,f
digunakan untuk argumen fungsi dalam fungsi tingkat tinggi (sepertig
danh
, jika kita membutuhkan lebih banyak). Saya tidak memiliki pengalaman yang cukup dengan bahasa fungsional untuk memastikan bahwa konvensi f / g / h ditetapkan dengan baik sebagai konvensi i / j / k, tetapi jika tidak, saya pikir itu harus (itu pasti adalah didirikan dalam matematika).sumber
Nama yang paling umum untuk ini yang pernah saya dengar selain kata ganti
f
adalahbinary operation
ataubinary function
- masalah dengan lebih spesifik dari itu adalah bisa melakukan apa saja secara harfiah , dan itulah sebabnya orang tetap menggunakan jenis tanda tangana -> b -> a
(ataua -> b -> b
jika dilipat dengan benar) .Jadi saya mengusulkan agar Anda melakukan hal itu, patuhi tanda tangan jenis, untungnya tanda tangan jenis tertentu memiliki nama
binary function
:, sepertia -> a
aunary operation
, dana -> b
aunary function
, Anda dapat memanggila -> a -> a
abinary operation
dana -> b -> c
abinary function
.sumber
binary operation
akan lebih berartia -> a -> a
danbinary function
akan berartia -> b -> c
... kebenaran pasti ada di antara keduanya. :-)Fungsi yang Anda minta kadang-kadang disebut sebagai "fungsi menggabungkan" (lihat misalnya halaman HaskellWiki di Lipat ), tetapi ini tidak cukup umum untuk menyebutnya terminologi standar.
sumber