#term predicate, 술어

1 minute read

predicate 발음듣기 [미] [prédikət]

  1. 【문법】 술부, 술어 (cf. SUBJECT)

  2. 【컴퓨터】 술어

구글 사전

술어[述語]

[논리]논리의 판단·명제에서, 주사(主辭)에 대하여 긍정 또는 부정의 입언(立言)을 하는 개념.

[언어] 같은 말 : 서술어.

다음 사전

확실한 기억은 아니지만 아마 이 STL을 공부하면서 이 단어를 처음 접했던 것 같다. 술어라는 단어 또한 익숙하지 않아서 predicate를 찾고 다시 술어라는 단어를 찾아봤던 기억이 난다. 술어의 뜻풀이 또한 어렵게 되어 있어 어떤 뜻인지 바로 알기 어려웠다.

프로그래밍 언어에서 사용하는 predicate는 서술어라기 보다는 논리에서 사용하는 긍정 또는 부정의 입언을 하는 개념으로 사용한다. true / false를 판단할 수 있는 식이나 boolean 값을 리턴하는 함수를 술어(predicate)라고 한다.

(define (abs x)
  (cond ((> x 0) x)
        ((= x 0) 0)
        ((< x 0) (- x))))

SICP에 나오는 이 Scheme 코드에서는 (> x 0), (= x 0), (< x 0) 이 식을 술어(predicate)라고 부른다.

class BadPredicate : public unary_function<Widget, bool>
{
public:
    BadPredicate() : timesCalled(0) {}
    bool operator() (const& Widget&)
    {
        return ++timesCalled == 3;
    }
private:
    size_t timesCalled;
};

vector<Widget> vw;
...
vw.erase(remove_if(vw.begin(), vw.end(), BadPredicate()), vw.end());

STL에서 컨테이너를 조물딱거릴때 functor를 많이 사용하는데, boolean 값을 리턴하는 operator() 멤버 함수가 있는 functor를 술어(predicate)라고 부른다. Effectivce STL에 나오는 이 예제 코드에서는 BadPredicate(이름 그대로 잘못 정의된 predicate이다. 값에 의해 전달되는데, operator() 호출에서 값을 누적시키고 있다.)가 술어이다.

predicate, 서술자 - 류광의 번역 이야기에서 predicate의 변역에 대한 고민을 볼 수 있는데, 똑같은 뜻으로 통하는 우리말을 찾는 게 참 쉽지 않은 일인걸 다시 느끼게 해준다.