Saya suka pemrograman fungsional dalam Oktaf, tetapi dalam praktiknya agak sulit. Saya bertanya-tanya tentang cara terpendek untuk mendefinisikan fungsi rekursif anonim.
Saya punya beberapa ide, tapi saya bertanya-tanya apakah ada cara untuk menggabungkan ide-ide ini untuk membuatnya lebih pendek (atau sama pendek tapi lebih fleksibel). Demi pertanyaan ini, mari kita menghitung mundur secara nol ke nol (hanya untuk menjaga muatan sesederhana mungkin).
Jika alasan saya benar, tidak ada nama variabel yang saya gunakan dalam contoh berikut ini yang akan tumpang tindih. Fungsi yang diinginkan adalah q(n)
, yang harus selalu mengembalikan nol. i
digunakan sebagai variabel counter, f
adalah fungsi rekursif yang saya sebut g
dalam lingkup lokal f
.
44 byte, "definisi sebaris f
"
q=@(n)(f=@(g,i){@()g(g,i-1),i}{~i+1}())(f,n)
44 byte, "definisi daftar argumen f
"
q=@(n,f=@(g,i){@()g(g,i-1),i}{~i+1}())f(f,n)
44 byte, "pisahkan definisi f
"
f=@(i,g){@()g(i-1,g),i}{~i+1}();q=@(n)f(n,f)
41 byte, "fungsi yang diinginkan sebagai nilai balik"
f=@(g)@(n){@()g(g)(n-1),n}{~n+1}();q=f(f)
'Pemenang' saat ini terinspirasi oleh jawaban ini oleh flawr . Namun, mengingat berbagai macam cara untuk melakukan ini, mungkin seseorang dapat memikirkan kombinasi metode yang lebih pendek.
Tujuannya tentu saja untuk mendapatkannya di bawah 39 byte untuk fungsi "penuh", Coba online!