문제

교수는 다음 프로그래밍 할당을위한 프로그래밍 언어를 선택할 수 있다고 말했습니다. 나는 기능적 언어를 시험해 보았 기 때문에 Clojure를 시험해 볼 것이라고 생각했습니다. 문제는 구문을 이해하고 기본 개념을 이해한다는 것입니다. 그러나 머리 속의 "클릭"에 모든 것이 문제가되는 데 문제가 있습니다. 누구든지 조언이 있습니까? 아니면 기능 프로그래밍을 시작하기 위해 잘못된 언어를 선택하고 있습니까?

도움이 되었습니까?

해결책

자전거를 타는 것과 조금 비슷하지만 연습이 필요합니다. 아마도 문제를 해결해보십시오 Projecteuler 결국 클릭 할 것입니다.

누군가가 "The Little Schemer"라는 책을 언급했으며 이것은 꽤 잘 읽었습니다. 그것은 체계를 목표로하지만 실제 문제는 협력 할 가치가 있습니다.

행운을 빕니다!

다른 팁

글쎄, 나에게, 나는 내가 OCAML을 시작했을 때 처음부터 당신과 같은 문제를 겪었지만, 그 속임수는 당신이 생각하기 시작해야한다는 것입니다. 코드에서 원하는 것 그리고 ~ 아니다 그것을하는 방법!!!

예를 들어, 목록 요소의 제곱을 계산하려면 목록의 길이와 그러한 트릭을 잊어 버리십시오. 수학적으로 생각하십시오 그렇게 :

  • 목록이 비어 있으면 -> 완료되었습니다.

  • 그렇지 않은 경우 목록에는 머리와 꼬리가 있어야합니다.> 머리의 제곱을 계산 한 다음 기능에 꼬리와 동일한 작업을하도록 요청하십시오.

일반적인 경우와 기본 사례에 대해 생각하면 데이터를 방출하고 수정하지 않는다고 생각하십시오 (수정하려고하지 않는 한).).

행운을 빕니다!

체크 아웃 할 수 있습니다 작은 계획서.

이건 어때: http://www.defmacro.org/rambless/lisp.html

정기적 인 필수 프로그래머 (Java, C#등)의 관점에서 LISP의 사고에 대한 매우 간단하고 단계별 소개입니다.

교육 목적으로 PLT 체계를 권장합니다. 매우 좋은 예와 더 나은 문서화가있는 휴대용 및 강력한 환경입니다. 기능적 프로그래밍 뒤의 생각을 단계별로 매우 깨끗하게 발견하는 데 도움이됩니다. 구현할 작은 응용 프로그램을 선택하면 새로운 언어를 배우는 데 도움이됩니다.

http://www.plt-scheme.org/

또한 H. Abelssn, G. Sussman 및 J. Sussman의 "컴퓨터 프로그램의 구조 및 해석"은 제도 (및 프로그래밍)에 관한 아주 좋은 책입니다.

문안 인사

MUE

보세요 99 Lispy 문제

Clojure에만 국한되지 않은 LISP에 대한 일부 생각 (LISP 전문가가 아니기 때문에 대부분 정확하고 유용하기를 바랍니다) :

AST에서 코딩

나는 컴파일러 나 통역 이론에 대해 거의 알지 못하지만 LISP에서 코딩 할 때마다 AST를 직접 구축하는 것처럼 느껴진다는 사실에 놀랐습니다.

이것이 "Code = Data"가 의미하는 바의 일부이며 LISP에서 코딩하는 것은 AST 노드로 데이터 구조를 채우는 것과 매우 유사합니다. 놀랍고 읽기 쉽습니다 (올바른 텍스트 편집기와 함께).

프로그래밍 가능한 프로그래밍 언어

따라서 코드 청크는 단지 중첩 된 목록이며 목록 작업은 언어의 일부입니다. 따라서 LISP 코드를 생성하는 LISP 코드를 매우 쉽게 작성할 수 있습니다 (LISP 매크로 참조). 이것은 LISP를 프로그래밍 가능 (그 자체로!) 프로그래밍 언어로 만듭니다.

이것은 건물을 만듭니다 DSL 또는 LISP의 통역사는 매우 쉽습니다 (또한 참조하십시오. 메타 원숭이 평가).

아무것도 재부팅하지 마십시오

또한 대부분의 LISP 시스템에서 코드 (문서 포함)는 런타임에 내성 및 핫 스왑 될 수 있습니다.

고급 OOP

그런 다음 대부분의 LISP 시스템에는 CLOS에서 파생 된 일종의 객체 시스템이 있습니다. Metaobject 프로토콜의 기술).

오래 전에 발명 한 이러한 모든 기능이지만 다른 많은 프로그래밍 언어로 제공되는지 확실하지 않습니다 (대부분은 폐쇄를 따라 잡고 있지만). 따라서 연습을 통해 "재발견"하고 사용해야합니다 (참조하십시오. 다른 답변의 책).

그냥 기억하십시오 : 그것은 모든 데이터입니다!

LISP가 잘하는 간단한 클래식 기능을 작성하십시오.

  • 목록을 반전하십시오

  • 원자가 S- 표현의 어딘가에 있는지 알려주십시오

  • 2 개의 S- 표현이 동일한지 알 수 있도록 동일하게 쓰십시오

  • S-Expression의 프린지에서 원자 목록을 얻으려면 프린지를 작성하십시오.

  • Subst를 쓰고 Sublis를 작성하십시오

  • 상징적 차별화

  • 대수 단순화

  • 간단한 평가 및/또는 적용을 작성하십시오

LISP는 이러한 종류의 비 효과적인 기능 프로그램에 적합하다는 것을 이해하십시오.

상태가없는 부작용 (비 기능적) 프로그램에도 유용하지만이 프로그램은 "기능"보다 "프로그램"과 비슷합니다.

주어진 응용 프로그램에 대해 더 좋습니다. 응용 프로그램에 따라 다릅니다. 일반적으로 필요한 것보다 더 이상 상태 정보를 포함하지 않아야합니다.

쉬운!

M-x  lisp-mode

좋아, 좋아, 그래서 당신은 뇌에 대한 EMAC가 없을 수도 있습니다. 진지하게, 당신이해야 할 일은 재귀를 진정으로 잘하는 것입니다. 이것은 정식 사례를 넘어 재귀 개념을 확장하려고 할 때 처음에는 뇌 날러가 될 수 있지만 궁극적으로 더 유동적 인 Lispy 코드를 초래할 것입니다.

또한, 많은 사람들이 괄호에 매달 렸고, 왜 그런지 모르겠습니다. 구문은 매우 간단하고 일관성이 있으며 몇 분 안에 마스터 할 수 있습니다. 저에게는 C ++와 Java를 배운 후 계획을 세웠으며 항상 "기능"과 "연산자"의 차이는 잘못된 이분법이라고 생각했으며, 차이가 제거 된 것을 보는 것은 상쾌했습니다.

기능 프로그래밍이 진행되는 한, 함수가 일류 값이며 다른 기능으로 안팎으로 전달 될 수 있다는 사실에 머리를 감쌀 수있는 한 괜찮습니다. 이것의 유용성은 시간이 지남에 따라 명확해질 것이지만, 기능 조절 및 기능 회복 기능을 작성할 수있는 것으로 충분합니다.

마지막으로, Clojure가 매크로에 대한 지원이 무엇인지 잘 모르겠지만 LISP의 필수 부분으로 간주됩니다. 그러나 위의 항목에 대해 깊이 익숙해지기 전까지는 학습에 대해 걱정하지 않을 것입니다. 매크로는 엄청나게 유용하고 다재다능하지만 내가 언급 한 다른 기술보다 덜 자주 사용됩니다.

해석 할 수있는 언어로 시작합니다. 나는 찾았다 모스크바 ML 상당히 쉬워요. 표준 ML의 가벼운 구현입니다.

저의 개인적인 관행은 작은 프로젝트 (3-5 박을 해킹 할 수있는 것)를 찾아서 구현하는 것입니다. 블로그 필터 도구는 어떻습니까? 어쩌면 하노이 또는 링크 된 목록 구현 (일반적으로 1 박 프로젝트) 일 수도 있습니다.

그것이 일반적으로 작동하는 방식은 처음으로 제대로 구현하고, 내가 가진 것을 버리고, 마침내 몇 시간을 클릭하는 것입니다.

큰 도움은 ... 음 ... LISP와 같은 코스를 수강하는 것입니다. :) 숙제는 많은 개념에 직면하게 될 것이며 학기가 끝나기 오래 전에 나를 위해 클릭했습니다.

행운을 빕니다!!

행운을 빕니다. 학교의 "클릭"전에 대학의 "프로그래밍 언어"코스 중간에 걸쳐서 나에게 걸렸습니다. 그럼에도 불구하고 일단 모든 것이 의미가 있었고, 나는 기능 프로그래밍에 사랑에 빠졌습니다.

LISP에 LISP 통역사를 작성하십시오.

Alrady가 아니라면 Lisp를 독특한 언어로 만드는 이유를 읽으십시오. 먼저이 작업을 수행하지 않으면 다른 프로그래밍 언어에서 할 수있는 똑같은 일을하려고합니다.

그런 다음 작은 것을 구현하십시오 (당신에게 유용하게 만들거나 동기가 없을 수도 있습니다).

상자에 lisp 발을 젖게하는 좋은 방법입니다.

나에게 중요한 것은 당신이 'lisp-y'방식으로 모든 것을하도록하는 것입니다. 'Java에서 나는 여기에서 루프를 사용하고 LISP에서 루프를 어떻게해야합니까?'라고 생각하지 마십시오. 그러나 충분한 예와 튜토리얼을 살펴 보려면 (누군가가 지적했듯이 SICP 코드가 'lisp-y'처럼 보일 때 발견 할 수 있고 공통 언어 패러다임을 인식 할 수 있습니다.

나는 방금 작성된 일부 코드를보고 그 언어와 플랫폼/프레임 워크가 올바르게 관용적이라는 것을 알고 직관적으로 알고 있다는 느낌을 확실히 알고 있습니다.

편집하다: 그리고 기능적 언어를 선택하기위한 kudos, 더 적은 학생들은 방금 Java에서 그것을했을 것입니다 :)

누가 클릭 할 것이라고 말했습니까? 나는 항상 혼란 스러워요

그러나 Lisp 매크로 뒤에 숨겨져있는 것이 얼마나 많은 추상화에 대해 생각한다면. 그러면 뇌가 폭발 할 것입니다.

:)

나는 프로그래밍 클로주기를 확인했다. 비 리퍼스에게는 훌륭한 책입니다.

다른 So'ers가 이미 제안한 것 외에도 다음은 2 센트입니다.

  1. 언어를 배우기 시작하고 언어에서 몇 가지 간단한 수치/취미 문제를 시도하십시오.
  2. 중요한: 솔루션/코드를 stackoverflow에 게시하고 사람들의 의견을 묻습니다. 방법 그것을하기 위해.

행운을 빌어 요!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top