표준 ML

위키백과, 우리 모두의 백과사전.
(Standard ML에서 넘어옴)

Standard ML
패러다임다중 패러다임: 함수형, 명령형, 모듈 방식[1]
계열ML
발표일1983년(41년 전)(1983)[2]
최근 버전Standard ML '97[2]
최근 버전 출시일1997년(27년 전)(1997)
자료형 체계추론, 정적, 스트롱
파일 확장자.sml
웹사이트smlfamily.github.io
주요 구현체
SML/NJ, MLton
방언
앨리스, 컨커런트 ML, 디펜던트 ML
영향을 받은 언어
ML, 호프, 파스칼
영향을 준 언어
Elm, F#, F*, OCaml, 파이썬,[3] 러스트, 스칼라

표준 ML(Standard ML, SML)은 정적 정형 및 타입 추론을 지원하는 범용 모듈성, 함수형 프로그래밍 언어. 컴파일러 개발과 프로그래밍 언어 연구, 자동 정리 증명의 개발에 사용된다.

SML은 계산가능한 함수( Logic for Computable Functions )의 정리 증명 프로젝트에서 사용되는 프로그래밍 언어인 ML의 현대적 방언이다. The Definition of Standard ML에서 타입 규칙조작적 의미론(operational semantics)을 포함하는 표준이 있다는 점에서 널리 사용되는 언어들 사이에서 두드러진다.[4]

언어[편집]

SML은 순수 함수형 프로그래밍이 아니다. SML로 작성된 프로그램은 구문이나 명령어가 아니라 평가되는 표현식으로 구성되지만, 일부 표현식은 무의미한 "단위"값을 반환하고 부작용을 갖는다.

다른 함수형 프로그래밍처럼 SML의 핵심은 함수다. 예를 들어 계승 함수는 아래과 같이 표현된다.

 fun factorial n = 
        if n = 0 then 1 else n * factorial (n - 1)

SML 컴파일러는 함수의 정적 타입 int -> int를 사용자의 별도 명시없이 유추한다. 즉, n 은 정수 표현식에서만 사용되므로 정수여야하며, 함수는 항상 정수를 리턴한다고 추론한다. if - then - else 조건문은 절에 따라 정의된 함수로 동일하게 표현될 수 있으며, 일치하는 것을 찾을 때까지 작성된 순서대로 하나씩 시도하고 '|'로 나뉘는 계승 함수의 특정 값을 평가하는 템플릿의 배열로 대체된다.

 fun factorial 0 = 1
   | factorial n = n * factorial (n - 1)

case 문으로 아래와 같이 작성할 수도 있다.

 val rec factorial =
        fn n => case n of 0 => 1
                        | n => n * factorial (n - 1)

반복문으로는

fun factorialIT value =
let
  val flag = ref value and i = ref 1
in
  while !flag <> 0 do (
  i := !i * !flag;
  flag := !flag - 1
  );
  !i
end;

익명 함수로는

val rec factorial = fn 0 => 1 | n => n * factorial(n - 1)

여기서 val 키워드는 식별자와 값을 바인딩하고, fn은 익명 함수를 정의하고, case는 일련의 패턴과 해당 표현식을 매칭한다. 로컬 함수를 사용해서 함수를 꼬리 재귀로 최적화할 수 있다.

 fun factorial n = let
      fun lp (0, acc) = acc
        | lp (m, acc) = lp (m-1, m*acc)
      in
        lp (n, 1)
      end

각주[편집]

  1. “Programming in Standard ML: Hierarchies and Parameterization”. 2020년 2월 22일에 확인함. 
  2. “SML '97”. 《www.smlnj.org》. 
  3. “itertools — Functions creating iterators for efficient looping — Python 3.7.1rc1 documentation”. 《docs.python.org》. 
  4. Milner, Robin; Tofte, Mads; Harper, Robert; MacQueen, David (1997). 《The Definition of Standard ML (Revised)》. MIT Press. ISBN 0-262-63181-4. 

외부 링크[편집]