一部の言語のドキュメントに「is」ではなく「equivalent to」と記載されているのはなぜですか?
たとえば、 the Python Docs と言います
itertools.chain(*iterables)
...
同等と:
def chain(*iterables): # chain('ABC', 'DEF') --> A B C D E F for it in iterables: for element in it: yield element
または このC++リファレンス on find_if
:
この関数テンプレートの動作はequivalentで次のようになります。
template<class InputIterator, class UnaryPredicate> InputIterator find_if (InputIterator first, InputIterator last, UnaryPredicate pred) { while (first!=last) { if (pred(*first)) return first; ++first; } return last; }
それが実際のコードではない場合、彼らはそれを投稿できませんか?そして、それが実際のコードである場合、なぜ彼らは単に「である」ではなく「同等」であると言わなければならないのですか?
標準のライターは実際に実装を表明したくないからです。彼らはが何をするかを定義する必要がありますが、必ずしもそれを行う方法ではありません。したがって、たとえば、 GNU C++バージョンの_find_if
_ を見ると、実装がC++標準に基づいた、指定したものとは少し異なることがわかります。
_template<typename _InputIterator, typename _Predicate>
inline _InputIterator
__find_if(_InputIterator __first, _InputIterator __last,
_Predicate __pred, input_iterator_tag)
{
while (__first != __last && !bool(__pred(*__first)))
++__first;
return __first;
}
_
これは、標準の機能と機能的に同等ですが、まったく同じではありません。これにより、コンパイラの作成者に柔軟性が与えられます。特定のプラットフォームでそれを行うためのより良い方法があるかもしれません。実装者は、異なるコーディングスタイルを使用することを望む場合があります。
これは、pythonのようなスクリプト言語に特に当てはまります。実装者は、パフォーマンス上の理由から完全に異なる言語で実装することを決定する可能性があります。pythonたとえば、C++でitertools.chain(*iterables)
を記述します。コードが提供されたpythonと同じである限り、標準が「同等」と言っている場合、これは完全に問題ありません。標準が「である」と言っている場合、実装者はその言語で実装するか、標準を満たさないようにする必要があります。
要約すれば: