I'm trying to learn newLISP by solving some of the Project Euler problems. I'm currently working on Problem 4 using streams, using some functions from http://www.newlispfanclub.alh.net/forum/viewtopic.php?f=5&t=2162. (It's the task I was given by my mentor.)

I'm trying to use the 2nd syntax of letex, but I must have something wrong because I get "ERR: list or string expected in function empty? s2".

- Code: Select all
`(define (product-stream-Reuler s1 s2 , s3)`

(setf s3 (if

(empty-stream? s1) the-empty-stream

(empty-stream? s2) the-empty-stream

(letex (

a1 (head s1)

a2 (head s2)

c1 (tail s1)

c2 (tail s2)

)

(println "a1=" 'a1 ", a2=" 'a2 "\ns1=" 's1 ", s2=" 's2 "\nc1=" 'c1)

(accumulate cons '()

(cons-stream

; first palindrome product of (* n s2)

(head

(filter-stream palindrome?

(product-stream (num-stream 'a1) 's2)

)

)

; re-run with next n

(product-stream-Reuler 'c1 's2)

)

)

)

))

s3

)

; a and b are streams of the integers from 999 to 100

(product-stream-Reuler a b)

I've tried fully parenthasizing the initializers [i.e. `(a1 (head s1))`] and adding initializers for (a s1) and (c s2), but neither fixes the problem.

What bit of letex am I misunderstanding?

Thank you for your help.