Search code examples
lispcommon-lispinfix-notationclispinfix-operator

CLisp error: "(x) is not number"


This is my function that's supposed to implement infix evaluation for * and + operations.

(defun calculate(l)
    (cond
        ((eql (cadr l) '+) (+ (car l) (cddr l)))
        ((eql (cadr l) '*) (- (car l) (cddr l)))
    )
)

When I run this with the list '(3 + 4) it gives me an error saying "(4) is not a number". Any ideas what the problem might be?


Solution

  • The part with (cddr l) should be (caddr l). You have to access the first element of the list, not the list. The code should be then:

    (defun calculate(l)
        (cond
            ((eql (cadr l) '+) (+ (car l) (caddr l)))
            ((eql (cadr l) '*) (- (car l) (caddr l)))
        )
    )