2013-04-24 2 views
2

나는 스키마의 초보자이며 항상 목록의 꼬리의 첫 번째 요소를 찾는 프로 시저를 작성하려고합니다. 이것은 재귀 호출에서 중요합니다. 여기 목록을 인수로 취하는 프로 시저 만들기

내 절차 :

(define second (lambda (x) (car(cdr(x)))) 

이 내가 제대로 여부 실행 여부를 확인하기 위해 시도하는 방법이다 :

>(define x (list 1 2 3 4)) 
>(second x) 

을이 오류입니다 :

procedure application: expected procedure, given: (1 2 3 4) (no arguments) 

=== context === 
stdin::184: second 
/usr/share/racket/collects/racket/private/misc.rkt:85:7 

무슨 문제 일 수 있습니까? 영감을 줄 수 있습니까? "제 2"의 정의가 잘못 되었습니까?

미리 감사드립니다.

+0

DrRacket에서 실행 중이십니까? 그렇다면 오류가 발생한 지역의 빨간색 강조 표시가 나타납니다. 이거 보이니? – dyoo

+0

아니요. 터미널에서 시도했습니다. – user2870

+0

가능한 경우 DrRacket으로 실행 해보십시오. 언어를 학습 할 때 제공되는 추가 지원이 유용해야합니다. – dyoo

답변

3

코드에 불필요한 괄호 쌍이 있습니다. 이 문제를 해결했습니다 :

(define second (lambda (x) (car (cdr x)))) 

분명히 : (cdr(x)). 올바른 양식은 (cdr x)입니다. 함수 f을 인수 x에 적용해야 할 때마다 올바른 방법은 (f x)입니다.

+0

와우 정말 고마워. 정말 고마워요 :) – user2870

+0

항상 내 즐거움 :) –

0

Scheme은 S- 표현식을 사용하므로 car(x) 대신 (car x)을 사용해야합니다. 귀하의 경우, 이는 (car (cdr x))이 아니라 car(cdr(x))을 의미합니다.

관련 문제