Matt, I tried all of your suggestions, and they all work, and the
explanation of the procedure call was crystal. Thanks!
I wasn't sure how it knew which and where to write the file. Then i just
(define file-name "pidigits.txt"), and all was good. Now to open a new
thread on Windows deployment.

Rob

On 3 October 2015 at 15:34, Matt Gushee <[email protected]> wrote:

> 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