その正式な定義における「純粋な関数型プログラミング」とは、出力が純粋に「マシンへの入力の関数」である計算マシンを設計するアイデアに関するものです。同じ入力をマシンに入力すると、同じ出力が生成されます。各入力には明示的に名前が付けられているため、依存関係が正確にわかります。純粋な関数型プログラミング言語はこれを厳密に実行します。
しかし...ベースライン "Rebol"では、次のように記述できます。
foo: function [value [integer!]] [
either now/date = 20-Feb-2013 [
value + 1
] [
value
]
]
ここでは、毎日の整数入力を返す関数を示していますが、今日は値に1を加えたものです。これには、関数への引数として正式に指定されていない日付に対する非表示の依存関係が含まれます。それは、Haskellの人々や、私自身のようなソフトウェアフォーマリストが血まみれの殺人を叫ぶようなものです。
したがって、Rebolはそのままでは純粋に機能しません。 (...でも読んで...)
関数型プログラミングのそれほど厳密ではない定義は、関数が言語の値として機能できる場合です。したがって、関数を変数に割り当てて、後で使用することができます。その意味で、JavaScriptは関数型言語であるということを読んで、危険な定義によって一部の人々はJavascriptが関数型言語であると言うようになることがわかります。もしあなたがその定義でそれを緩くするつもりなら、これは「機能的」でしょう:
>> foo: does [a + 10]
>> a: 20
>> print foo
== 30
(注:DOESは、引数なしで本体のみを持つ関数を定義するのに便利です。)
それ(またはJavaScript)を、私が話している人が関数型プログラミングと呼んでいるものに合うと考えるかどうかはわかりません。YMMV。
コンピュータサイエンスに時間を費やしている場合は、チューリングターピットや計算可能性、および「XをYに接続できればZが真になる」という同値のこの種の原理について学びます。そして、CでHaskell実装を作成し、HaskellライブラリにマップされたC呼び出しのみを使用するように制限できるのと同じように、「関数型プログラミング」を行っていて、技術的に正しいと主張するかもしれません。
したがって、Rebolを関数型プログラミングスタイルに曲げることができると言いたい場合は、悲観論者である可能性があります。「実際に、このような言語の限定されたサブセットを実際に使用しているときに、Cを実行しているふりをするのと同じです。「プロキシによってはHaskellを使用して再。Rebolの袖のトリックは、「方言」パラダイムから別のパラダイムにどれほど簡単に移行できるかです。たまたま機能的なドメイン固有言語を書くのはとても簡単で自然なことなので、それを行うために共同で言語をひねっているようには感じません。関数型の特性を持つドメイン固有の言語を作成する機能により、Rebolは「パラダイムニュートラル」としてラベル付けされます。
多くの人々は、Rebolを最も一般的な方言(DO方言)と混同して、「それがRebolとは何か」と考えています。しかし、Rebolの「エッセンス」はXMLに似ています。これは、偶然に(偶然ではなく)ある特定の方法で処理することに重点を置いて非常に最適化されたコードを偶然に(つまり、偶然ではなく)持つデータ交換フォーマットです。XMLからの脱却についての良い背景情報については、AmigaOS(そして現在はRebol)のカールサッセンラスが最初からXMLに欠陥があることを参照してください。