Biçimsel tanımında " Saf Fonksiyonel Programlama" çıktısı tamamen "makineye girişin bir fonksiyonu" olan hesaplama makinelerini tasarlama fikri ile ilgilidir . Aynı girişi makineye beslerseniz, aynı çıkışı üretir. Her giriş açıkça adlandırılır, böylece bağımlılıkların tam olarak ne olduğunu bilirsiniz. Saf işlevsel bir programlama dili bunu titizlikle uygular.
Yine de ... başlangıçta "Rebol" gibi şeyler yazabilirsiniz:
foo: function [value [integer!]] [
either now/date = 20-Feb-2013 [
value + 1
] [
value
]
]
Burada her gün ancak bugün artı değer elde ettiğiniz tamsayı girdisini döndüren bir işlev görüyoruz. İşlev için bir argüman olarak resmen belirtilmeyen tarihe görünmez bir bağımlılık içerir. Bu, Haskell insanlarını ve benim gibi yazılım formalistlerini kanlı cinayet çığlıkları haline getiren bir şey.
Bu nedenle Rebol, kutunun dışında saf bir işlev değildir . (... ama okumaya devam edin ...)
İşlevsel programlamanın daha az katı tanımı, işlevlerin dilde değerler olarak hareket edebilmesidir. Böylece bir değişkene bir işlev atayabilir ve daha sonra kullanabilirsiniz. Bu anlamda, javascript işlevsel bir dil beğenilerini okumak gidebilir ve dicey tanımının bazı insanların Javascript'in işlevsel bir dil olduğunu söylemeye yol açacağını görebilirsiniz. Tanım ile bu kadar gevşek olacaksanız, o zaman bu "işlevsel" olacaktır:
>> foo: does [a + 10]
>> a: 20
>> print foo
== 30
(Not: DOES, yalnızca gövdesi olan bağımsız değişkenleri olmayan bir işlevi tanımlamak için kolaylıktır.)
Konuştuğum insanlara uyacak şekilde (veya JavaScript'i) işlevsel programlama olarak adlandıracağımı bilmiyorum. YMMV.
Bilgisayar bilimlerinde herhangi bir zaman geçirirseniz Turing Tarpits ve hesaplanabilirlik gibi şeyleri ve "X'e Y'yi bağlarsanız Z doğru olur" gibi eşdeğerlik ilkelerini öğrenirsiniz. Ve tıpkı C'de bir Haskell uygulaması yazabildiğiniz ve daha sonra kendinizi sadece Haskell kütüphanesine eşlenen C çağrılarını kullanarak sınırlayabildiğiniz gibi, "işlevsel programlama" yaptığınızı ve teknik olarak doğru olduğunuzu iddia edebilirsiniz.
Dolayısıyla, Rebol'un işlevsel programlama stillerine bükülebileceğini söylemek istiyorsanız, kötümser olabilirsiniz ve "aslında, dilin bu kadar sınırlı bir alt kümesini kullandığınızda C yaptığınızı iddia etmekten daha iyi değil '' msgstr "Haskell'i proxy ile kullanıyorum" . Rebol'un kovanı, bir "çevirici" paradigmadan diğerine ne kadar kolay kaydığınızdır. Biraz alana özgü dil Yazma olur fonksiyonel olması kadar kolay ve doğal bunu yapmak için ortak dışarı Dil çeviriyorsun gibi hissetmez olmasıdır. Fonksiyonel karaktere sahip alana özgü diller yapabilme, Rebol'un "paradigma nötr" olarak etiketlenmesine yol açar .
Birçok kişi Rebol'u en yaygın lehçesi (DO lehçesi) ile karıştırır ve "Rebol'un ne olduğunu" düşünür. Ancak Rebol'un "özü" daha çok XML gibidir, tesadüfen (tamam, tesadüfen değil) , kutunun dışında bazı yollarla işlemeye odaklanan hiper optimize edilmiş bir koda sahip bir veri değişim formatıdır . Pantolonunu XML'den nasıl dövdüğüne dair iyi bir arka plan okuması için bkz. XML, AmigaOS (ve şimdi Rebol) şöhretinin Carl Sassenrath tarafından Start'tan kusurlu muydu .