Saya berlari ke Rebol dan saya bertanya-tanya tentang hal itu.
Saya menemukan skrip berikut dari sini :
use [feed questions answers][
feed: load-xml/dom http://stackoverflow.com/feeds/tag/rebol
questions: map-each entry feed/get-by-tag <entry> [
find/match entry/get <id> "http://stackoverflow.com/q/"
]
answers: make block! length? questions
foreach question questions [
question: load-xml/dom join http://stackoverflow.com/feeds/question/ question
foreach entry next question/get-by-tag <entry> [append answers entry/tree]
]
insert clear feed/find-element <entry> answers
feed/flatten
]
Semua operasi manipulasi koleksi seperti map-each
mengingatkan saya pada JavaScript dan C # yang keduanya memiliki kemampuan fungsional.
Apakah Rebol bahasa fungsional? Apakah itu mendukung pemrograman fungsional? Apakah akan diklasifikasikan sebagai bahasa fungsional murni (PFL)?
functional-programming
rebol
Benjamin Gruenbaum
sumber
sumber
Jawaban:
" Pemrograman Fungsional Murni " dalam definisi formalnya adalah tentang ide merancang mesin komputasi yang outputnya murni "fungsi input ke mesin" . Jika Anda memasukkan input yang sama ke dalam mesin, itu akan menghasilkan output yang sama. Setiap input diberi nama secara eksplisit sehingga Anda tahu persis apa dependensi itu. Bahasa pemrograman fungsional murni memberlakukan ini dengan ketat.
Namun ... pada awal "Rebol" Anda dapat menulis hal-hal seperti:
Di sini kita melihat fungsi yang mengembalikan input bilangan bulat pada setiap hari tetapi hari ini, di mana Anda mendapatkan nilai plus satu. Ini termasuk ketergantungan yang tidak terlihat pada tanggal yang tidak ditentukan secara formal sebagai argumen untuk fungsi. Ini semacam hal yang membuat orang-orang Haskell dan formalis perangkat lunak seperti saya menjerit pembunuhan berdarah.
Oleh karena itu Rebol tidak murni fungsional di luar kotak. (... tapi baca terus ...)
Definisi pemrograman fungsional yang kurang ketat adalah ketika fungsi dapat bertindak sebagai nilai dalam bahasa. Jadi, Anda dapat menetapkan fungsi ke variabel, dan menggunakannya nanti. Dalam arti itu, Anda dapat membaca suka adalah javascript bahasa fungsional dan melihat bahwa definisi tidak pasti akan menyebabkan beberapa orang mengatakan Javascript adalah bahasa fungsional. Jika Anda akan menjadi longgar dengan definisi maka ini akan menjadi "fungsional":
(Catatan: DOES adalah kemudahan untuk mendefinisikan fungsi tanpa argumen, yang hanya memiliki tubuh.)
Saya tidak tahu bahwa saya akan menganggap itu (atau JavaScript) agar sesuai dengan apa yang orang yang saya ajak bicara akan memanggil pemrograman fungsional. YMMV.
Jika Anda menghabiskan waktu dalam ilmu komputer Anda belajar tentang hal-hal seperti Turing Tarpits dan komputabilitas dan prinsip-prinsip kesetaraan semacam ini di mana "jika Anda dapat menghubungkan X ke Y maka Z akan benar". Dan sama seperti Anda dapat menulis implementasi Haskell di C, dan kemudian membatasi diri Anda hanya menggunakan panggilan C yang dipetakan ke dalam perpustakaan Haskell, Anda mungkin mengklaim Anda melakukan "pemrograman fungsional" dan secara teknis benar.
Jadi, jika Anda ingin mengatakan Rebol dapat menjadi bengkok ke gaya pemrograman fungsional, Anda mungkin pesimis dan berkata, "Yah, itu tidak lebih baik daripada berpura-pura Anda melakukan C ketika Anda benar-benar menggunakan subset bahasa yang terbatas sehingga Anda" kembali menggunakan Haskell melalui proxy " . Trik di lengan Rebol adalah seberapa mudah Anda tergelincir dari satu paradigma "dialek" ke paradigma lain. Menulis sedikit bahasa-spesifik-domain yang kebetulan fungsional sangat mudah dan alami sehingga Anda tidak merasa seperti memutar-mutar bahasa untuk melakukannya. Kemampuan untuk membuat bahasa spesifik domain yang memiliki karakter fungsional mengarah ke pelabelan Rebol sebagai "paradigma netral" .
Banyak orang mencampur Rebol dengan dialek yang paling umum (dialek DO) dan berpikir "itulah Rebol". Tapi "esensi" Rebol lebih seperti XML, itu adalah format pertukaran data yang secara kebetulan (oke, bukan kebetulan) memiliki kode yang dioptimalkan untuk memprosesnya dengan beberapa cara tertentu. Untuk bacaan latar belakang yang bagus tentang bagaimana mengalahkan XML, lihat Apakah XML cacat dari Awal oleh Carl Sassenrath dari ketenaran AmigaOS (dan sekarang Rebol).
sumber