순수(프로그래밍 언어)
Pure (programming language)![]() |
![]() | |
패러다임 | 기능, 선언적, 용어 재작성 |
---|---|
설계자 | 알베르트 그라프 |
개발자 | 알베르트 그라프 |
첫 등장 | 2008; | 전
안정적 해제 | 0.68 / 2018년 4월 11일; 전 |
타이핑 규율 | 강하고 역동적인 |
OS | 교차 플랫폼:FreeBSD, Linux, MacOS, Windows |
면허증 | GNU 약소 일반 공중 라이선스 |
웹사이트 | agraef |
영향을 받은 | |
Q, 하스켈, 리스프, 앨리스, MATLAB |
동일 언어 Q의 후속인 Pure는 용어 재작성을 기반으로 동적으로 타이핑된 기능적 프로그래밍 언어다.사용자 정의 연산자 구문, 매크로, 임의정밀 연산(복수정밀수) 및 LLVM을 통한 네이티브 코드로 컴파일할 수 있는 설비를 갖추고 있다.Pure는 GNU 소일반 공중 라이선스 버전 3 이상에서 배포된 무료 오픈 소스 소프트웨어(대부분)이다.
퓨어에는 통역사와 디버거가 함께 제공되며 자동 메모리 관리, 강력한 기능 및 심볼 프로그래밍 능력, C의 라이브러리와의 인터페이스(예: 숫자, 로우 레벨 프로토콜, 기타 그러한 작업)가 있다.동시에 Pure는 처음부터 고안된 작은 언어로서, 그 통역은 크지 않고, 도서관 모듈들은 Pure로 쓰여져 있다.퓨어의 구문은 미란다와 하스켈의 구문과 유사하지만, 자유형 언어여서 프로그램 구조를 나타내기 위해 (오프사이드 규칙 들여쓰기가 아닌) 명시적 구분자를 사용한다.
퓨어 언어는 앞서 같은 저자인 독일 마인츠 대학의 앨버트 그래프가 만든 등가 프로그래밍 언어 Q의 계승자다.Q에 비해 중요한 몇 가지 새로운 기능(예: 어휘 범위 지정, 효율적인 벡터 및 매트릭스 지원, 내장된 C 인터페이스 등)을 제공하며 프로그램이 즉시 네이티브 코드에 맞추어 컴파일되어 훨씬 빠르게 실행된다.퓨어는 현재 대부분 수학적 응용과 과학적인 컴퓨팅을 목표로 하고 있지만, 그것의 인터랙티브 통역 환경, C 인터페이스와 증가하는 애드온 모듈 세트가 인공지능, 심볼 연산, 실시간 멀티미디어 처리와 같은 다양한 다른 응용 분야에 적합하다.
Gnumeric 스프레드시트와 Miller Fuckett의 Pure Data 그래픽 멀티미디어 소프트웨어에는 퓨어 플러그인이 제공되어 퓨어 언어로 작성된 기능으로 이러한 프로그램을 확장할 수 있다.인터페이스는 GNU 옥타브, OpenCV, OpenGL, GNU Scientific Library, FAUST, SuperCollider, liblo(Open Sound Control(OSC)용)의 라이브러리 모듈로도 제공된다.
예
피보나치 숫자(네이브 버전):
fib 0 = 0, fib 1 = 1; fib n = fib (n-2) + fib (n-1) 만약 n>1;
섬유 n = 섬유 (a,b) n = n<=0인 경우 다른 섬유 (b,a+b) (n-1); 끝;
처음 20개의 피보나치 숫자를 계산하십시오.
지도 섬유(1..)20);
목록 이해를 사용하여 역추적 검색을 구성하는 n 퀸즈 문제에 대한 알고리즘:
queens n = search n 1 [] with search n i p = [reverse p] if i>n; = cat [search n (i+1) ((i,j):p) j = 1..n; safe (i,j) p]; safe (i,j) p = ~any (check (i,j)) p; check (i1,j1) (i2,j2) = i1==i2 j1==j2 i1+j1==i2+j2 i1-j1==i2-j2; end;
Pure는 기본적으로 열성적인 평가를 사용하지만 스트림과 같은 게으른 데이터 구조를 지원하기도 한다.예를 들어, 시험 분할에 의한 프라임 번호의 흐름을 계산하는 데이비드 터너의 알고리즘은[1] Pure:로 표현될 수 있다.
프라임 = 체(p:qs)가 있는 체(2..inf) = p : 체 [q q = qs; q mod p] &; 끝;
사용&
연산자는 체의 꼬리를 꽝으로 돌려 계산을 지연시킨다.목록 중 해당 부분에 액세스할 때(예: 다음과 같이) Thunk를 암묵적으로 평가한 다음 (필요 평가에 의한 통화 사용) 메모한다.
primes!!(0..99); // 처음 100 primes를 산출함
퓨어는 벡터 및 행렬(MATLAB 및 GNU 옥타브와 유사)에 대한 벡터 및 행렬(벡터 및 매트릭스 포괄성 포함)을 효율적으로 지원한다.예: 부분 피벗이 있는 가우스 제거 알고리즘은 다음과 같이 Pure에서 구현될 수 있다.
gauss_elimination x::matrix = p,x when n,m = dim x; p,_,x = foldl step (0..n-1,0,x) (0..m-1) end; step (p,i,x) j = if max_x==0 then p,i,x else // updated row permutation and index: transp i max_i p, i+1, {// the top rows of the matrix remain unchanged: x!!(0..i-1,0..m-1); // the pivot row, divided by the pivot element: {x!(i,l)/x!(i,j) l=0..m-1}; // subtract suitable multiples of the pivot row: {{x!(k,l)-x!(k,j)*x!(i,l)/x!(i,j) k=i+1..n-1; l=0..m-1}} when n,m = dim x; max_i, max_x = pivot i (col x j); x = if max_x>0 then swap x i max_i else x; end with pivot i x = foldl max (0,0) [j,abs (x!j) j=i..#x-1]; max (i,x) (j,y) = x<y then j,y ether i,x; end; /* matrix의 행 i와 j를 교환한다. */ 스왑 x i j = x!!(transp i j (0.n-1),0.m-1) n = dim x end; /*를 순열에 적용한다.*/ transp i j p = [p!tr k=0..#p-1] tr k ==i인 경우 j, k=j인 경우 다른 k엔드, /* 예: */ x = dmatrix {2,1,-1,8; -3,-1,2,-11; -2,2,-3}; x; gauss_elimination x;
용어 다시 쓰기를 기반으로 한 언어로서, 퓨어는 표현으로 상징적인 계산을 완전히 지원한다.간단한 산술 식을 확장하고 인자화하기 위해 로컬 재작성 규칙을 사용하는 예를 보여 주는 예는 다음과 같다.
expand = reduce with (a+b)*c = a*c+b*c; a*(b+c) = a*b+a*c; end; factor = reduce with a*c+b*c = (a+b)*c; a*b+a*c = a*(b+c); end; expand ((a+b)*2); // yields a*2+b*2 factor (a*2+b*2); // yields (a+b)*2
Pure에서 C 함수를 호출하는 것은 매우 쉽다.예를 들어, 다음과 같이 수입품목을 수입한다.puts
C 라이브러리에서 기능하여 문자열을 인쇄하는 데 사용"Hello, world!"
터미널에서:
바깥의 인트로 놓다(마를 뜨다*); 안녕 = 놓다 "안녕, 세상!"; 안녕;
참고 항목
참조
- 알베르트 그라프"순수 프로그래밍 언어에서의 신호 처리".리눅스 오디오 콘퍼런스 2009.
- 마이클 리페"순수 – eine einfache funktionale Sprache".헤이즈
- "알베르트 그라프와의 인터뷰" 블루파렌
메모들
- ^ Turner, David A. SASL 언어 설명서.기술. 파충류.CS/75/1.세인트 대학교 계산과학부Andrews 1975.