コンピュータサイエンスとコンピュータプログラミングでは、関数f は、非終了式に適用されたときに終了しない場合に正格であると言われます。 [1]プログラミング言語の表示的意味論における正格関数は、となる関数fです。bottom と呼ばれる実体は、無限にループするか、ゼロ除算などのエラーによって中止するため、通常の値を返さない式を表します。正格でない関数は非正格と呼ばれます。正格なプログラミング言語とは、ユーザー定義関数が常に正格である言語です。
直感的には、非厳密な関数は制御構造に対応します。操作上、厳密な関数は常に引数を評価する関数であり、非厳密な関数は引数の一部を評価しない可能性がある関数です。複数のパラメータを持つ関数は、各パラメータが独立して厳密または非厳密になるだけでなく、複数のパラメータが同時に厳密になることもあります。
たとえば、 C にヒントを得た言語でif-then-else呼ばれる多くのプログラミング言語の式は?:、3 つのパラメータの関数として考えることができます。この関数は、最初のパラメータでは正格です。関数は、最初の引数が true と評価されるか false と評価されるかを知ってからでないと、値を返すことができないからです。しかし、2 番目のパラメータでは (たとえば) のため非正格であり、3 番目のパラメータでも (たとえば) のため非正格です。ただし、2 番目と 3 番目のパラメータでは、および のため、両方とも正格です。
if(false,,1) = 1if(true,2,) = 2if(true,,) = if(false,,) =
非厳密な関数 型プログラミング言語では、厳密性分析とは、関数の 1 つ以上の引数に関して関数の厳密性を証明するために使用されるアルゴリズムを指します。このような関数は、囲んでいるプログラムの意味を変更することなく、 値による呼び出しなどのより効率的な呼び出し規約にコンパイルできます。
参照
参考文献
- ^ 「Haskell の簡単な入門: 関数」www.haskell.org 。2016年 6 月 23 日閲覧。
