KDB -

2016-12-29 3 views
3

내가 아래 문으로 무슨 일이 일어나고 있는지 이해 할 '곳'기능 작업을 수행하는 방법 :KDB -

sum(til 100) where 000011110000b 

그 라인 (22)에 평가하고, 나는 이유를 알아낼 수 없습니다에게. sum(til 100)4950입니다. where 000011110000b4 5 6 7 목록을 반환합니다. kdb 레퍼런스 페이지는이 사용 사례를 설명하지 않습니다. 왜 위의 행은 22로 평가됩니까?

또한, 왜 오류가 아래의 선 결과

4950 where 000011110000b 

답변

3

대괄호가 아니라 괄호보다, 함수 호출 인수에 사용되는 작업을 수행합니다. 그래서 위와 같이 해석되고있다 :

sum[(til 100) where 000011110000b] 

그리고 22로 평가하는 이유는 5, 6, 7, 목록 til 100, 즉의 8 값 (의 합계입니다 즉 당신은 아마 지금 볼 수 있습니다 0 ... 99), where 당신이 발견 한 것 등의 기능을 호출 할 때, 당신은 대괄호를 생략 할 수 있습니다 000011110000b

q)til[100] where 000011110000b 
4 5 6 7 

부울 목록을 사용하여 til 100에 색인되어 있기 때문에, 그러나 그렇게 할 때 의도 한대로 해석/해석 될 수 있어야합니다. 일반적으로 코드는 에서 오른쪽에서 왼쪽으로이므로이 경우 (til 100) where 000011110000b이 먼저 평가되고 그 결과가 sum 함수로 전달됩니다.

에 관해서는 오른쪽에서 왼쪽으로 생각하면 통역사는 where 000011110000b의 결과를 4590 함수로 전달하려고합니다. 4590은 kdb의 명명 된 함수가 아니지만 IPC, 즉 TCP를 통해 다른 kdb 프로세스에서 명령을 실행하는 데 사용되는 형식입니다. 따라서 kdb가 OS 파일 설명자 번호 4590 (유효한 TCP 연결과 거의 일치하지 않음)을 사용하여 where 000011110000b 명령을 실행하도록 알려줍니다. 자세한 내용은 여기의 '메시지 형식'섹션을 참조하십시오. http://code.kx.com/q/tutorials/startingq/ipc/