FPコース から:
type Set = Int => Boolean // Predicate
/**
* Indicates whether a set contains a given element.
*/
def contains(s: Set, elem: Int): Boolean = s(elem)
なぜそれが理にかなっているのですか?
assert(contains(x => true, 100))
基本的にそれが行うことは100
、関数に値を提供することx => true
です。つまり、100 を指定するとtrueが返されます。
しかし、これはセットとどのように関連していますか?
何を入れても、 が返されますtrue
。その意味はどこにありますか?
提供された値がセット内にある (またはセットでない) という事実を表すパラメーターとして、独自のセットの実装/関数を提供できることを理解しています-(のみ) この実装により、contains
関数は何らかの意味/意味/ロジックで満たされます。 /機能。
しかし、これまでのところ、ナンセンスな関数のように見えます。名前が付けられcontains
ていますが、名前はロジックを表していません。apply()
関数 (第 1 引数) を値 (第 2 引数) に適用するため、これを呼び出すことができます。名前だけでcontains
、作者が何を言いたいのかを読者に伝えることができます。抽象的すぎませんか?