2016-06-15 3 views
2

초급 질문입니다. 그러나 2 시간 이상 (나는 또한 수색을했다) 오류를 찾아내는 것을 시도하고있다 그러나 성공없이.스킴 : object()를 적용 할 수 없습니다.

(define a (lambda (l i) (
    (cond ((null? l) l) 
      (else (cons (cons (car l) i) (a (cdr l) i)))) 
))) 

함수 al는 각 항목 원자 i 페어링한다.

The object() is not applicable 

오류가 내 기능의 새로운 기능 : 예를 들면 : 내가 얻을 함수를 호출 사용하려고하면

(a '(1 2 3) 4) 그러나 ((1 4) (2 4) (3 4))

를 반환해야합니까?

나는 파일을로드 mit-scheme --load a.lisp을 사용하고 있습니다. 그런 다음 대화 형 모드에서 타이핑하여 함수 a를 호출합니다.

+0

체크 아웃 오류가 발생합니다 (https://stackoverflow.com/search?q=The+object+%28%29+is+ 해당 사항 없음 + % 5Bscheme % 5D +은 % 3Aq 임). 똑같은 문구를 사용하여 26 개의 질문 (이 단어 포함)을 찾습니다. –

답변

4

일반적으로 리스프 언어에서 발생하는 오류는 괄호의 잘못된 사용,이 경우 함수 본문을 묶는 여분의 괄호에 달려 있습니다.

그것을 제거하고 기능이 작동해야합니다

(define a (lambda (l i) 
      (cond ((null? l) l) 
        (else (cons (cons (car l) i) (a (cdr l) i)))))) 

Rember는 혀짤배기 괄호 안에 그 표현을 둘러싸의 방법이 아니라 구문의 중요한 부분 : ((+ 2 3))(+ 2 3) 완전히 다르다. 후자의 표현은 숫자 2와 3의 값을 합친 다음 결과를 반환한다는 의미입니다. 이전의 의미 : 숫자 2와 3의 값을 합하고 결과 (숫자 5)를 얻은 다음 매개 변수가 0 인 함수로 호출합니다. (5) 기능이 아니기 때문에 이것은 분명히 [SO의 검색 기능] ...

+0

대단히 감사합니다 !! 나는 그것을 알고 있지만 나는 그 여분의 괄호를 추가했다는 것을 결코 알지 못했을 것이다. 나는 cond에 의해 반환 된'l'에 대해 우려했고 나머지는 정확하다고 확신했다. 다시 한 번 감사합니다 – collimarco

+0

당신은 오신 것을 환영합니다! – Renzo

+1

@collimarco 들여 쓰기를 처리하는 편집기를 사용하면 많은 불균형을 감지하는 데 도움이됩니다. –

관련 문제