(defun pCount (number)
  (let (ans 0)
    (do ((iterator 1 (+ iterator 2)))
    ((equal iterator number))
    (if (equal (0) (rem iterator 3)))
        (+ ans iterator)
        (if (equal (0) (rem iterator 5)))
        (+ ans iterator)
        (+ ans 0))))

The object is to find the sum of all numbers divisible by 3 or 5 that are less than or equal to the number fed to the function.
(Problem from the site www.projecteuler.net)

As someone who is still new to the Lisp compiler error messages,

"While compiling pCount :
0 is not a symbol."

this looks like "equal" doesn't like the fact that I'm testing whether something is equal to a lone number, 0 in this case.

Is this the right analysis? And if so, why can I not put a number there?
Is there anything else terribly wrong with the code above?

Thanks.

Recommended Answers

All 6 Replies

Dunno which flavor of lisp you're using, but in Scheme it would be
(= a b) for numeric comparison. Try that...

I am (attempting) using Common Lisp. Changed "equal" to "=" for no effect.

Oh, I'm a moron. (0) is the problem - you want just 0, with the parens it means "the function of no argument called "0"

Here's some evaluations:

[1]> (= 2 4)
NIL
[2]> (= 2 2)
T
[3]> (= (0) 1)

*** - EVAL: 0 is not a function name; try using a symbol instead
The following restarts are available:
USE-VALUE      :R1      Input a value to be used instead.
ABORT          :R2      Abort main loop
Break 1 [4]> (= 0 1)
NIL
Break 1 [4]>

Looks like equal will work as well - I don't know if clisp makes a distinction, I'll play around and see. (I haven't done a lot of common)

Switched all the (0)'s to 0's. My compiler still insists that I'm using 0 as a symbol and that I'm not allowed to. (Error message above)

Ah. Now I feel dumb. It accepted the 0's, but more errors await. Next is the fact that my if statements are screwy somehow. Thanks for the help, though!

Okay, good. I was just getting ready to open up an interpreter.

The solution you're using looks like a reasonable one, although you should consider what happens when it hits 15 or 45. That's just a glance over it, though, there may be booby traps I haven't spotted. Good luck.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.