2012-03-16 4 views
2

구성표 함수에 문제가 있습니다. 숫자를 기대하지만,리스트를 수신 : 나 함수이고 호출 할 때연산자를 구성표 함수에 전달하는 방법

(define myfun(operator lis) 
    (if(null? lis) 
    '() 
    (cons(operator (car lis)(car lis))myfun(operator (cdr lis)) 
)))) 

함수는 파라미터 예 (+'(1 2 3 4)) 대한 목록과 내가 오류로 오퍼레이터 걸린다. 그래서 내 질문에 어떻게 연산자와 목록을 사용하여 재귀 함수를 호출합니까?

업데이트 : 운영자 앞에 ' 표지가 ​​필요합니다.

+0

더 "사업자"이 없습니다 수행합니다. 오히려 이름이 기호로 구성된 함수가 있습니다. 다른 함수와 마찬가지로 작동하므로 다른 함수와 마찬가지로 전달할 수 있습니다. – newacct

답변

4

따옴표없이 함수에 +을 전달하십시오. +은 더하기 함수를 나타냅니다.

(define (apply-op op x) 
    (op x x)) 

는 계획에

(apply-op + 2) ==> 4 
+0

고마워요, 저를 위해 망가 뜨린 괄호 실수였습니다. –

+2

코드를보고 즉시 예측할 수 있습니다. 당신은 괄호 문제를 겪고 있습니다 : 특히, 당신은 식별자 바로 뒤에 왼쪽 괄호가 있습니다. "cons (operator)"이것은 왼쪽 괄호를 연산자에 대한 호출이 아니라 죄수에 대한 호출의 일부로 생각하는 거대한 경고 기호입니다. 코드에서이 패턴을주의 깊게 살펴보십시오! –

관련 문제