2013-06-05 2 views
4

저는 "The Little Lisper"를 거쳐 첫 번째 장에서 걸림돌로 빠져 나가려합니다. 필자는 이맥스에 비교적 익숙하다. (Lisp과 클로저를 배우는데 관심을 갖게되었다.) 나는 Mit-scheme 앱을 다운로드했고 Edwin에서 연습을하고있다. A는 원자"atom"에 대해 언 바운드 오류가 발생하는 이유는 무엇입니까?

(atom? (cons a l)) 

을하고 난 이미 정의 목록입니다

내가 노력하고있어. 다음 오류가 발생합니다.

;Unbound variable: atom? 

왜? 나는 "null"을 사용하는데 문제가 없다. 기능. 나는 "원자?"라고 생각했다. 반환 된 값이 원자인지 확인하기위한 내부 함수입니다.

모든 설명은 많이 감사하겠습니다. 나는 아직도 이맥을 실행 계획에 세우지 않았고 모든 혀짤개 방언 사이의 사소한 차이점은 나의 인내심을 테스트하고있다.

+6

Scheme과 Lisp가 같지 않고 scheme에'atom? '술어가 없습니다. 그러나 당신은 쉽게 자신을 구현할 수 있습니다 : http://stackoverflow.com/questions/5404707/check-if-an-argument-is-a-list-or-an-atom –

+0

그 스레드를 보았지만, 나는 올바르게 이해하지 못했습니다. 내 실수는 내가 스킴 모드에서 실행되는 "Edwin"에서 이러한 연습 문제를 해결하려고한다는 것입니다. "The Little Lisper"에 대한 예제를 시도하고 작업 할 수있는 다른 응용 프로그램을 알려주시겠습니까? 이맥스에서 sbcl을 사용해 볼까요?여전히 정의/defun/defn이 맞는 위치 :-) – Tavore

+1

[clisp] (http://www.clisp.org/)을 시도 할 수 있지만 계획서로 전환 할 수도 있습니다. 고전적인 [컴퓨터 프로그램의 구조와 해석] (http://mitpress.mit.edu/sicp/)에 대한 완전한 내용은 자유롭게 이용할 수 있습니다. –

답변

3

atom? 절차가 정의 (atom? 때문에 계획에 존재하지 않는) : 당신이 경우

(define (atom? x) 
    (and (not (null? x)) 
     (not (pair? x)))) 

이 책의 구버전을 따라 새로운 버전을 찾거나이 책에서 사용 된 것과 동일한 프로그래밍 언어를 사용할 것을 권장합니다 : Little Lisper를위한 Common Lisp, Little Schemer를위한 Scheme - Racket은 훌륭한 Scheme IDE입니다. 작업! 이 answer에서 Racket을 사용하여 Little Schemer를 사용할 때 유용한 정보를 살펴보십시오.

+1

제 3 판의 PDF 파일이 있습니다. 나의 실수는 원자 함수가 정의 될 필요가 있음을 분명히 언급 한 머리말을 건너 뛰고 있었다. 또한 Scheme 편집기에서 Lisp 명령을 실행하여 두 오류의 차이점을 완전히 이해하지 못하여 오류가 발생했습니다. 나는 이맥스와 함께 SBCL을 고수 할 것이다. – Tavore

+1

@ Tavore, The Little Lisper와 함께 SBCL을 사용하지 않겠습니다. Little Lisper는 Common Lisp가 아닌 Scheme을 사용했는데, "Little Schemer"보다는 "The Little Lisper"라고 불렀을 때조차도 사용했습니다. 각주는 CL에서 같은 것을하는 법을 알려주지 만, Scheme을 사용하는 것이 더 쉽습니다. 특히 Y에 대한 최신 자료를 얻는다면 (특히 당신이 찾은 것처럼, 그것은 원자에서'atom? '을 정의합니다.) 조합 자. – Mars

2

I'm trying to go through "The Little Lisper"... I downloaded the Mit-scheme

커먼 리스프와 스킴은 매우 다른 언어입니다.

언어 구현 또는 다른 언어 구현 (예 : clisp 또는 sbcl)과 일치하도록 다른 책 (예 : SICP)을 사용하여 책과 일치시켜야합니다.

+0

나는 SICP를 가지고있다. 나는 리틀 리 세퍼 (Little Lisper)를 마친 후에 그것을 통해 갈 계획이었습니다. 나는 또한 아직 읽지 않은 작은 도식자를 가지고있다. 나는 책을 비축하고 그들 사이에서 혼란스러워했다. 감사. – Tavore

+0

SICP와 The Little Lisper/Schemer는 매우 다른 비용과 편익을 가지고 있습니다. SICP 전에 TLL/S를 진행하는 것은 좋은 생각입니다. – Mars

1

Scheme R5RS 사양을 살펴보십시오. 함수 목록과 구문 키워드를 포함합니다. Scheme 표준의 일부는 아니지만, mit-scheme은 주어진 이름의 함수 (다른 것들)를 찾을 함수 apropos을 가지고 있습니다. 시도 :

(apropos "atom") 

(하지만 아무 것도 표시되지 않지만 :-).

원자는 '단서 셀'이 아닌 것입니다 (일반적으로 내 CommonLisp을 기억하는 경우).

(define (atom? thing) (not (pair? thing))) 

참고 : atom?의 정의는 커먼 리스프 atom과 일치하는 계획에서 하나 같이 구현할 수 있습니다. 다음과 같이 "작은 음모"("작은 Lisper"의 업데이트 버전)에서

+0

감사합니다. 나는 그것을 시도 할 것이다. – Tavore

관련 문제