[plt-scheme] Re: Using PLT Scheme libs elsewhere?

From: Matthias Felleisen (matthias at ccs.neu.edu)
Date: Sun May 20 20:34:04 EDT 2007

with-input-from-file and with-output-to-file should be your friends.
On occasion, you will need functions (like from process, subprocess)
etc where you need to close via close- or via custodians. -- Matthias


On May 20, 2007, at 8:22 PM, SpinyNorman wrote:

> So when opening a port, you need to save a reference to it, rather
> than just invoking the "open" function to provide a "port" argument
> for a calling function.  That is, rather than
>
>     (foo (open-input-file "bar"))
>
> you would need to do
>
>     (define iport (open-input-file "bar"))
>     (foo iport)
>     (close iport)
>
> Unless, of course, foo *knows* it is supposed to close the port when
> it is finished.
>
> Right?  Or is there another way to approach this that would allow the
> composition of these functions?
>
>
> On May 20, 7:39 pm, Matthias Felleisen <matth... at ccs.neu.edu> wrote:
>> On May 20, 2007, at 7:34 PM, SpinyNorman wrote:
>>
>>> Is the (UNLESS ...) vs. (IF (NOT...)) issue purely stylistic, or for
>>> enhancing clarity for the poor schmo who has to read my code a month
>>> from now, or would you expect a speed difference?
>>
>> Yes, it's for him. And he might be you. Promised. Try it out.
>>
>> ;; ---
>>
>> You want to close ports because some OSes don't support too many
>> open ports at once. It's just something to get used to.
>>
>> -- Matthias
>>
>>
>>
>>
>>
>>> On May 18, 7:37 am, Matthias Felleisen <matth... at ccs.neu.edu> wrote:
>>>> Thanks. I'd use UNLESS instead of (if (not blah) one-armed-if).
>>
>>>> On May 18, 2007, at 4:18 AM, Jens Axel Søgaard wrote:
>>
>>>>> Hi,
>>
>>>>> SpinyNorman wrote:
>>
>>>>>> Share?  I'm flattered.  Here it is, and my only claim at this
>>>>>> point is
>>>>>> that hey, it works.  Algorithmic insights are more than welcome.
>>
>>>>>> (require (lib "md5.ss"))
>>
>>>>> This md5.ss implements MD5 in Scheme. The Java MD5 is probably
>>>>> implemented in C.
>>>>> So if you switch to a C-based MD5 implementation, you'll get a
>>>>> speedup. Here is
>>>>> what to do:
>>
>>>>> (require (planet "digest.ss" ("soegaard" "digest.plt" 1 2)))
>>>>> (require mzscheme)
>>
>>>>> (define test-string (make-string 10000))
>>
>>>>> (define (md-file-chunks port chunk-size)
>>>>>  (let loop ()
>>>>>    (begin
>>>>>      (display (md5 (read-bytes chunk-size port)))
>>>>>      (newline))
>>>>>    (if (not (eof-object? (peek-byte port)))
>>>>>    (loop))))
>>
>>>>> (md-file-chunks (open-input-string test-string) 1024)
>>
>>>>> See
>>>>> <http://planet.plt-scheme.org/display.ss?
>>>>> package=digest.plt&owner=soegaard>
>>>>> for documentation.
>>
>>>>> This was tested on Windows, but ought to work elsewhere too.
>>>>> You'll need a relatively new version of PLT Scheme, for
>>>>> example 369.100.
>>
>>>>> It wasn't obvious whether you put the md-file-chunks in a  
>>>>> module or
>>>>> whether you are using the top-level. If you are using the top- 
>>>>> level,
>>>>> the line
>>
>>>>>    (require mzscheme)
>>
>>>>> makes sure primitive operations are inlined.
>>
>>>>> I'd love to hear your new timings.
>>
>>>>> PS: Remember to close file ports after use.
>>
>>>>> --
>>>>> Jens Axel Søgaard
>>
>>>>> _________________________________________________
>>>>>  For list-related administrative tasks:
>>>>>  http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>>
>>>> _________________________________________________
>>>>   For list-related administrative tasks:
>>>>  http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>>
>>> _________________________________________________
>>>   For list-related administrative tasks:
>>>  http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>>
>> _________________________________________________
>>   For list-related administrative tasks:
>>  http://list.cs.brown.edu/mailman/listinfo/plt-scheme"
>
> _________________________________________________
>   For list-related administrative tasks:
>   http://list.cs.brown.edu/mailman/listinfo/plt-scheme



Posted on the users mailing list.