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을 再歸的으로 繼續 呼出한다.
같이 보기
[
編輯
]
外部 링크
[
編輯
]