캠
Caml![]() | |
패러다임 | 멀티패러다임: 기능, 필수 |
---|---|
가족 | ML |
설계자 | 제라르 후에, 기 쿠시노, 아스카인더 수아레스, 피에르 바이스, 미셸 마우니(헤비 캉), 자비에 르로이(캉 라이트) |
처음 등장한 | 1985 |
안정된 릴리스 | 0.75[1] / 2002년 1월 26일, 전( |
타이핑 분야 | 추정, 정적, 강력 |
OS | 크로스 플랫폼 |
웹 사이트 | caml |
영향을 받다 | |
ML | |
영향받은 | |
OCaml |
Caml(원래 Categoryical Abstract Machine Language의 약자)은 ML 프로그래밍 언어 패밀리의 방언인 다중 패러다임 범용 프로그래밍 언어입니다.Caml은 프랑스에서 INRIA와 ENS에서 개발되었습니다.
Caml은 정적으로 입력되며 엄격하게 평가되며 자동 메모리 관리를 사용합니다.Caml의 주요 후손인 OCaml은 오브젝트 계층을 포함하여 언어에 많은 기능을 추가합니다.
예
다음에서#
는 Caml 프롬프트를 나타냅니다.
안녕 세계
print_endline "안녕, 세상아!";;
요인 함수(재귀 및 순수 기능 프로그래밍)
요인 등의 많은 수학 함수는 가장 자연스럽게 순수 함수 형태로 표현됩니다.다음 재귀적, 순수하게 기능하는 Caml 함수는 계수를 구현합니다.
허락하다 인식하다 사실 n = 한다면 n=0 그리고나서 1 또 다른 n * 사실(n - 1);;
이 함수는 패턴 매칭을 사용하여 동등하게 쓸 수 있습니다.
허락하다 인식하다 사실 = 기능. 0 -> 1 n -> n * 사실(n - 1);;
이 후자의 형태는 반복 관계로서의 요인 수학적인 정의입니다.
컴파일러는 이 함수의 유형을 다음과 같이 추정합니다.int -> int
즉, 이 함수는 ints를 ints에 매핑합니다.예를 들어 12!는 다음과 같습니다.
# 사실 12;; - : 인트 = 479001600
수치도함수(고차함수)
Caml은 기능성 프로그래밍 언어이기 때문에 Caml 프로그램에서 함수를 만들고 전달하기 쉽습니다.이 기능에는 수많은 응용 프로그램이 있습니다.함수의 도함수를 계산하는 것도 그러한 응용 프로그램 중 하나입니다.다음 Caml 함수d
주어진 함수의 도함수를 계산하다f
어느 시점에서x
:
허락하다 d 델타 f x = (f (x +. 델타) -. f (x -. 델타)) /. (2. *. 델타);;
이 함수에는 작은 값이 필요합니다.delta
델타의 좋은 선택은 기계 엡실론의[citation needed] 입방근입니다.
함수의 유형d
이 맵이 맵된 것을 나타냅니다.float
그 활자로 다른 기능에 접속하다(float -> float) -> float -> float
이를 통해 부분적으로 인수를 적용할 수 있습니다.이 기능적인 스타일은 카레링이라고 알려져 있습니다.이 경우 첫 번째 인수를 부분적으로 적용하는 것이 유용합니다.delta
로.d
, 보다 전문적인 기능을 얻으려면:
# 허락하다 d = d (sqrt 엡실론_크롬);; 값 d : (흘러가다 -> 흘러가다) -> 흘러가다 -> 흘러가다 = < >재밌어요>
유추된 타입은 치환된 것을 나타냅니다.d
다음 유형의 함수가 필요합니다.float -> float
그 첫 번째 논쟁으로과 같이 에서 -1의 도함수에 대한 근사치를 계산할 수 있다.
# d (재밌어요 x -> x *. x *. x -. x -. 1.) 3.;; - : 흘러가다 = 26.
정답은 f (x ) - ( ) - { { f' ( ) =} -1 \ (3) = - 1} 입니다.
함수d
는, 다른 함수를 받아들이기 때문에, 「순차 함수」라고 불립니다.f
)를 인수로 합니다.더 나아가 f의 (대략적인) 도함수를 만들 수 있습니다.d
을 생략하고x
인수:
# 허락하다 f' = d (재밌어요 x -> x *. x *. x -. x -. 1.) ;; 값 f' : 흘러가다 -> 흘러가다 = < >재밌어요>
큐리 함수와 고차 함수의 개념은 수학 프로그램에서 분명히 유용합니다.실제로 이러한 개념은 대부분의 다른 프로그래밍 형태에도 동일하게 적용 가능하며 코드를 훨씬 적극적으로 인수분해할 수 있으므로 프로그램 길이가 짧아지고 버그가 줄어듭니다.
이산 웨이브릿 변환(패턴 매칭)
2길이의 정수 거듭제곱 목록의 1D Haar 웨이브릿 변환은 Caml에서 매우 간결하게 구현될 수 있으며, 요소 쌍을 취하면서 목록에 대한 패턴 매칭을 사용하는 훌륭한 예입니다.h1
그리고.h2
)를 전면에 배치하고, 그 합계나 차분을 리스트에 격납합니다.s
그리고.d
, 각각:
# 허락하다 하르 l = 허락하다 인식하다 보조 l s d = 경기 l, s, d 와 함께 [s], [], d -> s :: d [], s, d -> 보조 s [] d h1 :: h2 :: t, s, d -> 보조 t (h1 + h2 :: s) (h1 - h2 :: d) _ -> invalid_invalid_invalids "하" 에 보조 l [] [];; 값 하르 : 인트 목록. -> 인트 목록. = < >재밌어요>
예를 들어 다음과 같습니다.
# 하르 [1; 2; 3; 4; -4; -3; -2; -1];; - : 인트 목록. = [0; 20; 4; 4; -1; -1; -1; -1]
패턴 매칭을 통해 복잡한 변환을 명확하고 간결하게 표현할 수 있습니다.게다가 Caml 컴파일러는 패턴 일치를 매우 효율적인 코드로 변환해, 경우에 따라서는 케이스 스테이트먼트로 기술된 동등한 코드보다 짧고 빠른 프로그램을 생성한다(Cardelli 1984, 페이지 210).
역사
첫 번째 Caml 구현은 1987년 프랑스 컴퓨터 과학 자동화 연구소(INRIA)[2]의 Ascannder Suarez에 의해 리스프 언어로 작성되었습니다.
후속작인 Caml Light는 Xavier Leroy와 Damien Doligez에 [2]의해 C에 구현되었으며, 원래 Caml은 메모리와 CPU [2]요건이 높아서 "Heavy Caml"이라는 별명을 얻었다.
Caml Special Light는 핵심 언어에 강력한 모듈 시스템을 추가한 완전한 개서입니다.오브젝트 레이어로 증강되어 Objective Caml이 되었고, 최종적으로 OCaml로 이름이 변경되었습니다.
「 」를 참조해 주세요.
레퍼런스
참고 문헌
- Guy Cousineau와 Michel Mauny의 Caml 프로그래밍 기능적 접근법.
- 카델리, 루카(1984년).LISP 및 기능 프로그래밍에 관한 기능 언어 ACM 심포지엄, 컴퓨터 기계 협회 편집.
외부 링크
- 공식 웹사이트 – Caml 언어 패밀리