예를 들어 패턴 일치는 매크로를 통해 클로저 언어에 추가 할 수있는 프로그래밍 언어 기능입니다. http://www.brool.com/index.php/pattern-matching-in-clojure라이브러리를 통해 Clojure에 추가 할 수있는 언어 기능은 무엇입니까?
언어에 추가 할 수있는 다른 언어 기능은 무엇입니까?
예를 들어 패턴 일치는 매크로를 통해 클로저 언어에 추가 할 수있는 프로그래밍 언어 기능입니다. http://www.brool.com/index.php/pattern-matching-in-clojure라이브러리를 통해 Clojure에 추가 할 수있는 언어 기능은 무엇입니까?
언어에 추가 할 수있는 다른 언어 기능은 무엇입니까?
내 모자의 맨 위에는 두 가지 예가 나와 있지만 그 이상이있을 것입니다.
David Nolens는 [core.logic] (http://github.com/clojure/core.logic)에서 작동하며 mini-kanren에 대해서도 언급 할 수 있습니다. – kotarak
, 당신이 요청해야하는 것은 추가하지 못할 것입니다. 매크로를 사용하면 거의 모든 것을 할 수 있다는 것을 컴파일러에 연결할 수 있습니다.
현재 언어에 고유 한 구문을 추가 할 수 없습니다. Clojure에는 사용자 확장기 (user extensble) 독자가 없기 때문에 독자가 매크로를 가지고 있지 않다는 것을 의미합니다 (http://dorophone.blogspot.com/2008/03/common-lisp-reader-macros-simple.html). 이것은 기술적 인 문제로 인한 것이 아니라 Rich Hickey (Clojure 창안자)의 결정 때문입니다.
할 수없는 일은 추가 꼬리 호출 의미 또는 goto
과 같은 가상 매치 니스 지원이 필요한 기능을 구현하는 것입니다.
작업이 완료되었습니다 몇 가지 물건 보려면 :이 목록은 현재까지 100 %의 최대이다 Are there any Clojure DSLs?
참고.
편집 : 당신은 당신이 정말 match
도서관에서 찾아야한다 예를 들어 (이 매크로의 힘에 대한 정말 좋은 예이다)와 같은 패턴 매칭을했다 보인다 때문에
. Clojure에서 가장 빠른 패턴 일치 라이브러리입니다. http://vimeo.com/27860102
당신은 여전히 자신 만의 문법을 추가 할 수 있습니다 : 전체 Clojure 리더를 당신 자신의 것으로 대체하고'(my-include "file.clj")'매크로로 사용하십시오. –
원하는 언어 기능을 효과적으로 추가 할 수 있습니다.
이것은 컴파일 타임에 임의의 코드를 구성 할 수있는 매크로의 기능입니다. 언어 기능을 구현하기 위해 생성해야하는 코드를 파악할 수 있으면 매크로를 사용하여 구현할 수 있습니다.
내가 본 몇 가지 예 :
"누군가에게 포트란을 주면 그는 포트란을 갖게됩니다. 누군가에게 Lisp을 주면 그는 기뻐하는 언어를 갖게됩니다." Guy Steele –
* 이런 식으로 언어에 추가 할 수없는 것을 나열하는 것이 쉬울 것입니다. 불행히도'goto'가 그들 중 하나입니다. –
JVM은 적절한 테일 호출 부족과 같은 몇 가지 제한을 부과합니다 (http://blogs.oracle.com/jrose/entry/tail_calls_in_the_vm). – ponzao