Saya sedang berpikir tentang membuat currying dan fungsi variadic keduanya tersedia dalam bahasa pemrograman fungsional yang diketik secara dinamis, tapi saya ingin tahu apakah itu mungkin atau tidak.
Berikut ini beberapa kodesemu:
sum = if @args.empty then 0 else @args.head + sum @args.tail
yang seharusnya meringkas semua argumennya. Kemudian, jika sum
itu sendiri diberi nomor, maka hasilnya adalah 0
. sebagai contoh,
sum + 1
sama dengan 1, dengan asumsi bahwa +
hanya dapat bekerja pada angka. Namun, meskipun sum == 0
benar, sum
masih akan mempertahankan nilai dan properti fungsionalnya tidak peduli berapa banyak argumen yang diberikan (maka "diterapkan sebagian" dan "variadik" pada saat yang sama), misalnya, jika saya menyatakan
g = sum 1 2 3
maka g
sama dengan 6
, bagaimanapun, kita masih bisa menerapkan lebih lanjut g
. Sebagai contoh, g 4 5 == 15
itu benar. Dalam kasus ini, kami tidak dapat mengganti objek g
dengan literal 6
, karena meskipun mereka menghasilkan nilai yang sama ketika diperlakukan sebagai integer, mereka mengandung kode yang berbeda di dalamnya.
Jika desain ini digunakan dalam bahasa pemrograman nyata, apakah akan menimbulkan kebingungan atau ambiguitas?
sum
adalah 0
tanpa argumen dan secara rekursif menyebut dirinya dengan argumen.
reduce
?
args
: empty
, head
, dan tail
. Itu semua adalah fungsi daftar, menunjukkan bahwa mungkin hal yang lebih mudah dan lebih mudah untuk dilakukan adalah dengan menggunakan daftar di mana hal-hal variadik akan terjadi. (Jadi, sum [1, 2, 3]
alih-alih sum 1 2 3
)