- 술어구문(predicate)이란 bool값을 반환하는 함수를 말한다.
ex) find_if의 매개변수인 함수 등등
- 순수 함수란 이 함수가 반환하는 값이 그 함수의 매개변수에 종속된 함수이다.
ex) f가 순수함수고 x, y 가 객체일때 f(x,y) 의 반환값은 x나 y의 값이 바뀔때만 변한다.
- 술어 구문 클래스 란 operator()가 술어 구문인 클래스를 말한다.
즉 함수객체에 맴버변수가 있고 이 변수를 초기화 하여 알고리즘에 넘겼을때 알고리즘이 실행되는 중간에 이 변수가 변하고 그것이 결과에 영향을 미치는 것일 경우 알고리즘 내부에서 함수객체의 복사가 어디서 몇번이루어 지는지 알수 없기 때문에 문제가 발생할수 있다.
이 문제는 술어구문 클래스의 operator()를 const로 만듬으로써 어느정도 예방이 가능하지만 const 맴버함수라고 해도 이것저것(책참조)에 접근이 가능하며 값을 바꿀수 있기 때문에 순수 함수로 만들어야 하는 것이다.
자세한 코드는 책참조.