Strict function とは

関数fは、終了しない式に適用すると終了しない場合には厳密であると言われます。プログラミング言語の意味論的意味における厳密な関数は、関数fである f ( ) =⊥ {\displaystyle f\left(\perp \right)=\perp } 。 bottomと呼ばれる実体 {\displaystyle \perp } は、無限にループするか、またはゼロによる除算のようなエラーのために中断するために、通常の値を返さない式を表します。厳密ではない関数を非厳密といいます。厳密なプログラミング言語は、ユーザー定義の関数が常に厳密になる言語です。
直観的には、厳密でない関数は制御構造に対応しています。操作上、厳密な関数は常に引数を評価する関数です。厳密でない関数は、引数のいくつかを評価しない可能性のある関数です。 2つ以上のパラメータを有する関数は、各パラメータにおいて厳密または非厳密であり、同時に複数のパラメータにおいて同時に厳密である。
一例として、多くのプログラミング言語のif-then-else表現は、3つのパラメータの関数として考えることができる。この関数は、最初の引数がtrueかfalseのどちらで返されるかを知る必要があるため、最初のパラメータでは厳密です。 (例えば)if(true、2(1))が1であるため、第2パラメータでは厳密ではありません。しかし、if(true、 {\displaystyle \perp } {\displaystyle \perp } )= {\displaystyle \perp } 、if(false、 {\displaystyle \perp } {\displaystyle \perp } )は2番目と3番目のパラメータに共通して厳密です。 )= {\displaystyle \perp } である。
厳密ではない関数プログラミング言語では、厳密性解析は、1つまたは複数の引数について関数の厳密さを証明するために使用されるアルゴリズムを指します。そのような関数は、囲みプログラムの意味を変えることなく、値渡しの呼び出しなど、より効率的な呼び出し規約にコンパイルできます。