2009-05-05 2 views
1

나는 함수형 프로그래밍을 실험 해왔다. 그리고 나는 아직도 그 개념을 이해하지 못한다. 여러분은이 개념을 논의하는 좋은 책이나 튜토리얼 또는 예를 알고 있습니까? 또는 사용법에 대해 작은 스 니펫을 표시 할 수 있다면 좋을 것입니다.Homoiconicity에 대한 자세한 정보는 어디에서 얻을 수 있습니까?

+0

기능 프로그래밍과 호모 이성질체가 모두 서로 관련이있는 것은 아닙니다. 대부분의 기능 언어는 homoiconic이 아니며, Common Lisp와 같이 특별히 기능적이지 않은 호모 이서 릭 언어가 있습니다. 사실 염려하는 한 기능적으로 호모 이코 틱 언어는 Clojure뿐입니다. –

+2

스키마는 기능적 및 호모 이콘틱 언어입니다. –

답변

4

혀짤배기 또는 체계를 배우십시오. 언어는 자료 구조가 언어입니다. Lisp 코드와 Lisp 데이터 구조는 같은 구문 규칙을 가지고있다.

tcl을 배우면 절차 인 언어로 작업 할 수 있습니다. 데이터 구조 구문 규칙은 프로그래밍 언어 구문 규칙과 동일합니다.

엄밀히 말하면 기능 프로그래밍 문제는 아닙니다. 데이터에 대한 구문 규칙과 언어에 대한 구문 규칙이 동일한 몇 가지 언어의 문제입니다.

1

REBOL는 homoiconic 언어입니다. REBOL에있는 block! 데이터 유형은 유효한 REBOL 토큰이있는 대괄호 세트이며, Lisp의 S 표현식과 유사합니다. 예를 들면 : 우리가 foreach 함수에 전달 될 때, 우리는 코드로 블록 for-body을 처리

series: [1 2 3 4] 
for-body: [print item] ; This is the body of our foreach 
foreach item series for-body 

이 데이터로 선언되었지만 :

이제
series: [1 2 3 4] 
foreach item series [ 
    print item 
] 

,의는 약간 다르게 것을 표현 할 수 있습니다. 블록 for-body의 첫 번째 항목 유형이 - type? first for-body 인 경우 REBOL에 이 아닌 function! (또는 native! 또는 action! 또는 다른 REBOL 함수 유형 중 하나)이 표시됩니다. 그 이유는 데이터로서, for-body은 REBOL 단어의 평가되지 않은 부분 일뿐입니다. 우리가 이것을 foreach에게 건네면 코드로 평가됩니다.

일부 사람들은 REBOL을 "Lisp과 비슷하지만 괄호없이"호출했으며 개인적으로 Lisp을 선호하지만 그렇지 않을 수도 있습니다. 그래도 호모 이성 (homoiconicity)에 대해 배우고 싶을 때부터 시작하는 것은 훌륭한 언어입니다. 매혹적인 주제입니다.