Q(Kx 시스템에서 언어 프로그래밍)

Q (programming language from Kx Systems)
q
패러다임배열, 기능
설계자아서 휘트니
개발자Kx 시스템즈
첫 등장2003[1]
안정적 해제
4.0 / 2020년 3월 17일; 2년(2020-03-17)[2]
타이핑 규율다이나믹, 강인함
웹사이트code.kx.com
영향을 받은
A+, APL, Scheme, k

QArthur Whitney가 개발한 어레이 프로세싱을 위한 프로그래밍 언어다.그것은 Kx 시스템즈가 상용화한 독점 소프트웨어다.Q는 디스크 기반 및 인메모리 컬럼 기반 데이터베이스kdb+의 질의어 역할을 한다.Kdb+는 APL 언어의 terse 변종인 언어 k를 기반으로 한다.Q는 k 주위에 얇은 포장지로, 보다 읽기 쉽고 영어와 같은 인터페이스를 제공한다.사용 사례 중 하나는 재무 시계열 분석으로, 정확한 시간 일치를 얻을 수 없기 때문이다.그 예로는 입찰과 그 전의 요구를 일치시키는 것이다.두 타임스탬프 모두 약간 다르며 어쨌든 일치한다.[3]

개요

q의 기본 구성 요소는 원자, 목록, 기능이다.원자는 스칼라이며 숫자, 문자, 날짜 및 시간을 포함한다.목록은 상위 수준의 데이터 구조 사전테이블이 내부적으로 구성된 원자(또는 기타 목록)의 순서 모음입니다.사전은 키 목록과 값 목록의 지도다.표는 기호 키와 동일한 길이 목록(컬럼)을 값으로 바꾸어 놓은 사전이다.로 된 테이블기본 키가 놓여 있는 테이블과 유사하게 키로 된 테이블로 키와 값이 두 개의 테이블로 배열되어 있는 사전이다.

다음 코드는 데이터 구조의 관계를 보여준다.평가할 표현식은 앞에 다음이 붙는 것으로 나타난다.q)아래 표시된 평가 결과를 사용하여 즉시:

q)john / john q)50/정수 50 q)"john"jack / 기호 목록 q)60 / 정수 50 q)john!50 기호 목록 50 q)명세 사전 50 잭 60 q)!('존'잭;50 60) / 칼럼 사전 이름 존 잭 나이 50세 60 q)180세 이름 나이!("존"잭;50 60) / ")" 함수를 통해 전치될 때, 칼럼 사전은 테이블 네임 에이지 --------- 존 50 잭 60 q (flip) (enlist)!enlist "john"jack!플립('나이지')!사전으로 결합된 50/2개의 같은 길이의 테이블이 키 테이블 네임 에이지---- 존 50 잭 60이 된다.

이러한 실체는 Q(K 매크로로 정의)와 함께 제공되는 내장 기능과 사용자 정의 기능을 포함하는 기능을 통해 조작된다.함수는 데이터 유형이며, 목록, 사전, 표에 배치하거나 매개 변수로 다른 함수에 전달할 수 있다.

K와 마찬가지로 Q도 해석되며 세미콜론으로 종료되지 않는 한 표현식의 평가 결과가 즉시 표시된다.헬로 월드 프로그램은 따라서 사소한 것이다.

q)"헬로 월드!" "헬로 월드!"

다음 식은 변수 x에 저장된 문자열 목록을 길이를 기준으로 정렬한다.

x@idesc 카운트 각 x

표현식은 다음과 같이 오른쪽에서 왼쪽으로 평가된다.

  1. "count all x"는 리스트 x에 있는 각 단어의 길이를 반환한다.
  2. "idesc"는 값 목록을 내림차순으로 정렬하는 인덱스를 반환한다.
  3. @ 오른쪽의 정수 값을 사용하여 문자열의 원래 목록으로 인덱싱한다.

요인 함수는 다음과 같이 Q에서 직접 구현할 수 있다.

{prd 1+118 x}

또는 로서 반복적으로

{$[x=0;1;x*.z.s[x-1]}

두 경우 모두 함수가 일반적으로 x -라는 단일 인수를 암시적으로 취하거나 x, y, z라는 이름의 최대 3개의 암시적 인수를 사용하거나 인수를 명시적으로 로컬 변수 바인딩으로 지정할 수 있다는 점에 유의하십시오.

직접 구현에서 "til x"라는 표현은 0에서 x-1까지의 정수를 열거하고 "1+"는 목록의 모든 요소에 1을 더하며 "prd"는 목록의 제품을 반환한다.

재귀적 구현에서 구문 "$[조건; expr1; expr2]"는 3차 조건부로, 조건이 참이면 expr1이 반환되고, 그렇지 않으면 expr2가 반환된다.".z.s"라는 표현은 Java에서 '이것' 또는 Python에서 'self'와 느슨하게 동등하다 - 이것은 포함하는 객체에 대한 언급이며, q의 기능을 스스로 호출할 수 있게 한다.

x가 2보다 큰 정수인 경우 다음 함수는 prime이면 1을 반환하고 그렇지 않으면 0을 반환한다.

{min x mod 2_mod x}

함수는 오른쪽에서 왼쪽으로 평가된다.

  1. "expective x"는 x보다 작은 음수가 아닌 정수를 열거한다.
  2. "2_"는 열거의 처음 두 요소(0과 1)를 삭제한다.
  3. "x mod"는 원래 정수와 잘린 목록의 각 값 사이의 모듈로 분할을 수행한다.
  4. "min"은 modulo 결과 목록의 최소값을 찾는다.

q프로그래밍 언어는 qSQL이라는 자체 테이블 질의 구문을 포함하고 있어 기존 SQL과 유사하지만 중요한 차이를 가지고 있는데, 주로 기본 테이블이 행이 아닌 열로 방향을 잡고 있기 때문이다.

q)show t:([] 이름:"john'jack"''jack'''jack'''jack''jack''''jane; 나이:50 60 50 20) / 간단한 표를 정의하고 "t"이름 나이 -------- 존 50 잭 60 질 50 제인 20에 할당
q)select from t where name like "ja*",age>50이름 나이 -------- 잭 60 q)select rows:count i by age from t연령 행 ---- 20 1 50 2 60 1

참조

  1. ^ "Q Language Widening the Appeal of Vectors". Archived from the original on January 1, 2007. Retrieved June 1, 2016.{{cite web}}: CS1 maint : 부적합한 URL(링크)
  2. ^ "Changes in 4.0" (Press release). Palo Alto: Kx Systems. Mar 17, 2020. Retrieved Apr 15, 2020.
  3. ^ "Q Reference Card". Retrieved 15 April 2020.

추가 읽기

외부 링크