한국   대만   중국   일본 
ML (프로그래밍 言語) - 위키百科, 우리 모두의 百科事典 本文으로 移動

ML (프로그래밍 言語)

위키百科, 우리 모두의 百科事典.

ML
패러다임 多重 패러다임 : 函數兄 , 제네릭 , 命令形
設計者 로빈 밀너 等 ( 에든버러 大學校 )
發表日 1973年 (51年 前) ( 1973 )
資料型 體系 兄 推論 , 政敵 , 스트롱
方言
OCaml , 標準 ML , F#
影響을 받은 言語
ISWIM
影響을 준 言語
클로저 (프로그래밍 言語) , Coq , 사이클론 , C , Elm , F# , F* , 하스켈 , Idris , 코틀린 , 미란다 , Nemerle , OCaml , Opa , Erlang , Rust , Scala , 標準 ML

ML 은 汎用 프로그래밍 言語 의 一種이다. 프로그래밍 言語 分野의 核心 硏究 成果들을 잘 反映하면서도 實用的인 言語로 알려져 있다. 特히, 安全한 타입 시스템 을 갖추고 있어 프로그램을 實行하는 中에 나올 수 있는 타입 에러를 實行하기 前에 미리 모두 찾아준다. 힌들리__301/NNGey-Milner) 타입 推論 시스템을 具現하여 자바 와 같은 길고 不便한 資料型 (타입) 表記 없이도 變數들의 資料型을 推論할 수 있다.

ML은 하스켈 과 같은 純粹한 函數兄 言語와 같이 函數가 자유롭게 使用될 수 있으면서도, 메모리 狀態를 변화시키는 函數를 許容하는 函數兄 프로그래밍 言語 의 모습도 갖추고 있다. 이 때문에 函數兄 言語이면서 純粹하지 않은 函數兄 言語로 分類한다.

그밖에 ML에는 이런 特徵이 있다.

  • 메모리 再活用 (garbage collection)을 통해서 自動으로 메모리를 管理한다.
  • 函數의 多形性 (polymorphic functions)을 支援하여 타입과 相關 없이 實行할 수 있는 函數를 定義할 수 있다.
  • 代數的 資料型 (algebraic data type)을 支援하여 常委에서 資料構造를 表現할 수 있다.
  • 값들의 패턴 매칭을 통해 簡便하게 條件文을 만들 수 있다.
  • 簡單하고 强力한 例外 시스템으로 프로그램의 實行흐름을 便利하게 企劃할 수 있다.

ML 프로그래밍 시스템은 다양한 種類가 있다. SML (Standard ML)과 Caml 이 가장 널리 알려진 것이며, F# 等 다른 言語들도 存在한다. 韓國 에서 開發된 ML 프로그래밍 시스템으로는 KAIST 에서 開發하였고 現在는 서울大 에서 擴張·管理하고 있는 nML 이 있다.

ML의 基本 아이디어는 C# , 자바 , 하스켈 , 사이클론 , 네멜레 等 많은 言語에 影響을 미쳤다.

ML은 主로 프로그래밍 言語의 實行器(interpreter)나 飜譯機(compiler), 프로그램 分析器 等을 開發하고 다루는 데 使用하지만, ML은 本來 汎用 프로그래밍 言語이므로 生物情報學 , 金融 電算網, P2P 클라이언트/서버 프로그램 等의 開發에도 使用한다.

예제 [ 編輯 ]

ML 函數의 形態 [ 編輯 ]

函數兄 프로그래밍의 Hello world 라고 할 만한 것은 팩토리얼 을 計算하는 코드이다. 純粹 ML로는 다음과 같이 表現할 수 있다.

fun fac : (fn: int -> int) 0 = 1
 | fac n = n * fac (n-1);

이 코드는 팩토리얼을 基本的인 境遇(base case)가 하나 있는 再歸 函數 로 定義한 것이다. 數學 敎科書에서 볼 수 있는 팩토리얼의 定義와 비슷하다. ML 코드는 文法과 計算方式의 側面에서 數學的 言語와 닮았다.

팩토리얼 函數의 첫 番째 줄은 이 函數의 資料型 을 標示하는 部分이다. ML은 코드로부터 自動으로 變數와 函數의 資料型을 推論하므로 이 部分은 없어도 無妨하다. 첫 番째 줄은 " 函數 fac (fac) 의 資料型은 (:) 精髓에서 精髓로 가는 (fn: int -> int) 函數이다. " 와 같이 解釋할 수 있다. 따라서 이 函數는 正數를 人者로 받아 또 다른 整數를 返還하는 函數이다.

資料型을 明示하는 部分을 除去하면 코드는 다음과 같이 簡單해진다.

fun fac 0 = 1
 |  fac n = n * fac(n-1);

函數의 因子가 括弧로 둘러싸여 있지 않고 空白으로 區分되어 있음을 注目하라. 두 番째 줄은 ML의 또다른 重要한 特性인 패턴 매칭으로 이루어져 있다. 函數 fac은 因子가 0이면 1을 返還한다. 나머지 모든 境遇에 對해서는 두 番째 줄을 實行하여 0에 到達할 때까지 fac을 再歸的으로 繼續 呼出한다.

같이 보기 [ 編輯 ]

外部 링크 [ 編輯 ]