선언형 프로그래밍 언어

선언형 프로그래밍 언어는 선언형 프로그래밍을 사용하여 해법을 정의하기보다는 문제를 설명하는 고급언어이다. 명령형 프로그래밍 언어는 "어떤 방법"으로 할 것인지에 중점을 두는 반면에, 선언형 프로그래밍 언어는 "무엇"을 할 것인지에 중점을 두고 있다. 이 용어는 전체적으로 명확하지 않아서 때로 물의를 일으키기도 한다. 그래서 때로 유행어로 사용되기도 한다.

선언형 프로그래밍 언어를 선언형이라고 하는 데에는 여러 의미가 있다. 프롤로그는 프로그래머가 어떤 방법으로 답을 계산해야 하는지를 정의하지 않고 관계를 정하거나 서로의 관계를 묻는 질문을 하기 때문에 선언형이다. 함수형 프로그래밍 언어는 어떤 연산도 정해진 순서로 계산되어야 한다는 것이 정의되지 않고 함수들의 입력과 출력이 서로 연결되어 있기 때문에 선언형이다. 자료지향 프로그래밍 언어와 질의 언어는 질의문들이 어떤 방법으로 자료를 찾아야 하는지가 주어지지 않고 대신에 원하는 자료의 기준만 주어지기 때문이다.(SQL이 그 예이다.)

가장 이상한 프로그래밍 언어의 예는 완전히 선언형이라는 것이다. HTML은 순서대로 일어나는 사건이 없기 때문에 진정한 선언형이다. 자바스크립트를 추가하면 순서대로 화면을 바꿀 수 있기 때문에 선언형의 순수함을 잃는다. 인터페이스 기술 언어(IDL)은 계산법을 명시하지 않고 관계를 명시하기 때문에 주로 선언형이다. 그러나 이 두 가지 예 모두 아무것도 계산하지 않기 때문에 실제 프로그래밍 언어인지는 전혀 분명하지 않다.

이런 구분은 명확하지 않다. 프롤로그는 재귀법과 cut 연산자를 이용하여 명시적으로 계산을 하는데 사용할 수 있다. 순수 함수형이 아니거나 모나드를 사용하는 함수들은 연속통과형이나 입출력을 통하여 분명히 확실한 순서대로 연산을 수행한다. SQL의 INSERT와 DELETE 명령은 순서의 영향을 받는다. 반면에 어셈블리어는 낮은 수준의 지시문을 순서대로 나열하는 것이 가능하지만 정적 메모리 할당과 매크로와 같은 선언적 특징도 있다.

일반적으로 선언형으로 분류할 수 있는 언어 
 ABSET
 Lustre
 MetaPost
 OpenLaszlo
 프롤로그
 SQL
 XSL Transformations
 :분류:선언형 프로그래밍 언어 역시 참고 가능하다.

선언형 프로그램의 동작 예제 
  Declarative redesign of a pocket calculator (Thimbleby, Harold. "A new calculator and why it is necessary", Middlesex University 1998)

읽을거리 
 선언형 프로그래밍