Hi, Robert--

On Fri, Oct 2, 2015 at 1:48 PM, Robert Herman <[email protected]> wrote:

>
> Here's what I have so far that throws a 'lambda-list expected' error.
> NOTE: I tried a format without the lambda part as well:
> ...
> (display "How many digits of Pi to compute?\n ")
>

If you don't care about portability to other Scheme systems, you can write

    (print "How many digits of Pi to compute?")

and save yourself having to add a newline at the end.

>
> (define digits (read))
>


> (display "Here you go: \n")
> (format #t (number->string (pich digits)))
>

There's nothing really wrong with the above code, but I don't see the point
of using FORMAT here. You could just as well write

    (display (pich digits))

or

    (print (pich digits))


>
> (define (write-to-a-file
> "c:/users/robert/desktop/Chicken-IPU-Examples/pidigits.txt" (lambda ()
> (format #t "~A~%" (number->string(pigud num))))))
>

Here's where you're having trouble. Both the syntax of the procedure
definition and the usage of FORMAT are wrong. A procedure definition should
look like:

    (define (PROC-NAME [PARAMS])   ; parentheses enclosing proc name and
params
        BODY)

... which is syntactic sugar for:

    (define PROC-NAME                      ; no parentheses enclosing proc
name
        (lambda ( [PARAMS] )
            BODY)))

Note that in the first form, which is what you seem to be trying to write,
you generally don't use a lambda expression (you can, but in that case your
function would return another function, which I don't think is what you
mean to do).

The next problem is that you have a literal string (the filename) in the
parameter list, which is not done (at least not that I've ever seen, and I
can't imagine how it would be useful).

Finally, your call to FORMAT cannot write to a file as written. There's
more than one way you could do it, but the simplest way would be to use
WITH-OUTPUT-TO-FILE. So a correct definition might look like:

    (define (write-to-a-file file-name)
        (with-output-to-file file-name
            (lambda ()
                (format #t "~A-%" (pigud num)))))

Or

    (define write-to-a-file
        (lambda (file-name)
            (with-output-to-file file-name
                (lambda ()
                    (format #t "~A-%" (pigud num)))))

I'm assuming PIGUD and NUM are defined somewhere earlier in the program.
Otherwise you'll get undefined variable errors. Also, if you actually want
the file name to be a constant, maybe you don't need to define the
WRITE-TO-A-FILE procedure at all - just perform the actions contained in
its body.

Hope that helps.

--
Matt Gushee
_______________________________________________
Chicken-users mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/chicken-users

Reply via email to