2012-05-06 3 views
1
(define str '("3" "+" "3")) 
(define list '(3 + 4)) 


(define (tokes str) 
    (case (car str) 
    ((or "+" "-" "*" "/")(write "operand") 
         (tokes (cdr str))) 

         (else (write "other")) 
    )) 

(define (tokelist) 
    (case (car list) 
    ((or "+" "-" "*" "/")(write "operand")) 
    (else (write "other")))) 

답변

3

목록으로 작업 할 때 문자열 "+"과 절차 +을 비교하려고합니다. 이들은 서로 다른 유형이며, 동일하지 않습니다.

> (string? "+") 
#t 
> (procedure? +) 
#t 
> (string? +) 
#f 

이 당신에게 문제를 해결하는 방법에 대한 좋은 아이디어를 줄 것이다, 그러나주의 :

이 시도

> (= + +) 
=: expects type <number> as 1st argument, given: #<procedure:+>; 
other arguments were: #<procedure:+> 

을 당신이 필요합니다

> (equal? + +) 
#t 
> (equal? + "+") 
#f 
> (equal? "+" "+") 
#t 

이 사용 아이디어를 얻으려면 코드가 작동해야합니다.

(define (plus? s) 
    (if (procedure? s) (equal? + s) (equal? "+" s))) 
+0

정말 고마워요! – Ceelos

+1

내 기쁨 - 도움이 되니 기쁩니다. – craigmj

관련 문제