CL과 약간의 Clojure에 대한 Lisp에 대해 몇 달 동안 배우고 놀고 난 후에도 C # 대신 무언가를 작성해야 할 강력한 이유를 찾지 못했습니다.
나는 몇 가지 설득력있는 이유를 원하거나 누군가가 내가 정말로 큰 것을 놓치고 있다고 지적하고 싶습니다 .
Lisp의 강점 (나의 연구 당) :
- 콤팩트하고 표현적인 표기법-C #보다 더 그렇습니다. 그러나 C #에서도 그러한 아이디어를 표현할 수있는 것 같습니다.
- 함수형 프로그래밍에 대한 암시 적 지원-LINQ 확장 메서드를 사용하는 C # :
- mapcar =. 선택 (람다)
- mapcan =. (람다)를 선택합니다. ((a, b) => a.Union (b))
- 자동차 / 첫 번째 = .First ()
- cdr / rest = .Skip (1) .... 등
- 람다 및 고차 함수 지원-C #에는이 기능이 있으며 구문은 훨씬 간단합니다.
- "(람다 (x) (본문))"대 "x => (본문)"
- "# ("with "%", "% 1", "% 2"는 Clojure에서 훌륭합니다.
- 객체와 분리 된 메소드 디스패치-C #은 확장 메소드를 통해이를 수행합니다.
- 다중 메소드 디스패치-C #에는 기본적 으로이 기능이 없지만 몇 시간 안에 함수 호출로 구현할 수 있습니다
- 코드는 데이터 (및 매크로)입니다. 매크로를 얻지 못했지만 매크로의 아이디어를 함수로 구현할 수없는 단일 예제는 보지 못했습니다. "언어"를 바꾸지는 않지만 그게 힘인지 잘 모르겠습니다
- DSL-기능 구성을 통해서만 수행 할 수 있지만 작동합니다.
- 형식화되지 않은 "탐사"프로그래밍-구조체 / 클래스의 경우 C #의 자동 속성 및 "개체"가 매우 잘 작동하며 진행하면서 더 강력한 타이핑으로 쉽게 에스컬레이션 할 수 있습니다.
- Windows 이외의 하드웨어에서 실행됩니다. 대학 밖에서는 집에서 Windows를 실행하지 않는 사람이나 * nix / Mac에서 Windows의 VM을 하나 이상 알고있었습니다. (또 다시, 이것은 아마도 내가 생각했던 것보다 더 중요하고 방금 세뇌되었습니다 ...)
- 상향식 디자인의 REPL-좋아, 이것이 정말로 훌륭하다는 것을 인정하고 C #에서는 그것을 놓친다.
Lisp에서 누락 된 것 (C #, .NET, Visual Studio, Resharper의 혼합으로 인해) :
- 네임 스페이스. 정적 메소드를 사용하더라도 컨텍스트를 분류하기 위해 "클래스"에 묶는 것을 좋아합니다 (Clojure는 이것을 가지고있는 것으로 보이지만 CL은 보이지 않습니다).
- 뛰어난 컴파일 및 디자인 타임 지원
- 유형 시스템을 사용하면 내가 통과하는 데이터 구조의 "정확성"을 결정할 수 있습니다.
- 철자가 틀린 것은 실시간으로 밑줄이 쳐집니다. 런타임까지 알고 기다릴 필요가 없습니다.
- 코드 개선 (예 : 명령 방식 대신 FP 방식 사용)이 자동 제안됩니다.
- GUI 개발 도구 : WinForms 및 WPF (Clojure가 Java GUI 라이브러리에 액세스 할 수 있다는 것을 알고 있지만 완전히 외국입니다.)
- GUI 디버깅 도구 : 브레이크 포인트, 스텝 인, 스텝 오버, 값 검사기 (텍스트, XML, 사용자 정의), 시계, 스레드 별, 조건부 브레이크 포인트, 모든 레벨에서 코드로 이동할 수있는 콜 스택 창 스택에
- (공평하게, Emacs + Slime에 대한 나의 견해는 이것의 일부를 제공하는 것처럼 보였지만 VS GUI 중심 접근 방식에 부분적입니다)
나는 Lisp를 둘러싼 과대 광고를 정말 좋아하고 기회를 주었다.
그러나 Lisp에서 C #으로 할 수없는 일이 있습니까? C #에서는 조금 더 장황하지만 자동 완성 기능도 있습니다.
내가 무엇을 놓치고 있습니까? Clojure / CL을 사용해야하는 이유는 무엇입니까?
AND
쓰거나 OR
함수로 쓰는 방법을보고 싶습니다 . 그것은 가능할 수도 있지만 ( LAMBDA
매크로이기도합니다) 완전히 빠지지 않는 명확한 방법을 보지 못했습니다.