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"))))
4

1 に答える 1

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)))
于 2012-05-06T05:57:50.627 に答える