Dear Andy, good to know you are playing with the memoize egg. ATM I don't have time to look deeper into the problem you pointed out. Sorry for that. After I finish some personal stuff I'll dig into it.
Em 01/04/2016 11:56, "Andy Bennett" <
address@hidden> escreveu:
On 01/04/16 15:28, Andy Bennett wrote:
> Hi Peeps!
>
> I'm running CHICKEN 4.9.0rc1 and I'm trying out the memoize egg.
>
> I saw the tail-call-optimized version of the factorial procedure in the
> memoize documentation at http://api.call-cc.org/doc/memoize and I've
> been trying to modify it so that it memoizes intermediate results such
> that, for example, a call to (fact 10) makes a subsequent call to (fact
> 9) fast.
>
> In doing so I've managed to get the interpreter into a loop or crash it
> entirely.
>
>
> When pasting this into a csi prompt:
>
> -----
> (use numbers)
> (use memoize)
>
> (define (fact** x #!optional (self memo-fact**))
> (if (= x 0)
> 1
> (* x (self (- x 1)))))
>
> (define memo-fact** (memoize fact**))
>
> (define x (time (memo-fact** 35710)))
> (define x (time (memo-fact** 35720)))
> (define x (time (memo-fact** 35730)))
> -----
>
> I get:
>
> -----
> $ csi
>
> CHICKEN
> (c) 2008-2014, The Chicken Team
> (c) 2000-2007, Felix L. Winkelmann
> Version 4.9.0rc1 (rev 3cf1967)
> linux-unix-gnu-x86-64 [ 64bit manyargs dload ptables ]
> compiled 2014-04-17 on hd-t1179cl (Linux)
>
> ; loading /home/local/andyjpb/.csirc ...
> ; loading /usr/local/chicken-4.9.0/lib/chicken/7/parley.import.so ...
> ; loading /usr/local/chicken-4.9.0/lib/chicken/7/chicken.import.so ...
> ; loading
> /usr/local/chicken-4.9.0/lib/chicken/7/data-structures.import.so ...
> ; loading /usr/local/chicken-4.9.0/lib/chicken/7/extras.import.so ...
> ; loading /usr/local/chicken-4.9.0/lib/chicken/7/ports.import.so ...
> ; loading /usr/local/chicken-4.9.0/lib/chicken/7/posix.import.so ...
> ; loading /usr/local/chicken-4.9.0/lib/chicken/7/srfi-1.import.so ...
> ; loading /usr/local/chicken-4.9.0/lib/chicken/7/srfi-13.import.so ...
> ; loading /usr/local/chicken-4.9.0/lib/chicken/7/srfi-18.import.so ...
> ; loading /usr/local/chicken-4.9.0/lib/chicken/7/stty.import.so ...
> ; loading /usr/local/chicken-4.9.0/lib/chicken/7/srfi-69.import.so ...
> ; loading /usr/local/chicken-4.9.0/lib/chicken/7/foreign.import.so ...
> ; loading /usr/local/chicken-4.9.0/lib/chicken/7/foreigners.import.so ...
> ; loading /usr/local/chicken-4.9.0/lib/chicken/7/parley.so ...
> ; loading /usr/local/chicken-4.9.0/lib/chicken/7/stty.so ...
> #;1> (use numbers)
> ; loading /usr/local/chicken-4.9.0/lib/chicken/7/numbers.import.so ...
> ; loading /usr/local/chicken-4.9.0/lib/chicken/7/numbers.so ...
> #;2> (use memoize)
> #;2>
> #;2> (define (fact** x #!optional (self memo-fact**))
> #;2> (if (= x 0)
> #;2> 1
> #;2> (* x (self (- x 1)))))
> #;2>
> #;2> (define memo-fact** (memoize fact**))
> #;2>
> #;2> (define x (time (memo-fact** 35710)))
> #;2> (define x (time (memo-fact** 35720)))
> #;2> (define x (time (memo-fact** 35730)))
> #;2>
> ; loading /usr/local/chicken-4.9.0/lib/chicken/7/memoize.import.so ...
> ; loading /usr/local/chicken-4.9.0/lib/chicken/7/memoize.so ...
>
> Note: the following toplevel variables are referenced but unbound:
>
> memo-fact** (in fact**)
> 2.804s CPU time, 1.064s GC time (major), 81305 mutations, 21/1551 GCs
> (major/minor)
> 0s CPU time, 20 mutations
> 0s CPU time, 20 mutations
> #;8>
> [panic] out of memory - heap full while resizing - execution terminated
>
> ...more...
> parley.scm:610: history817818
> parley.scm:610: history817818
> parley.scm:603: ##sys#dynamic-wind
> parley.scm:603: history798799
> parley.scm:603: history798799
> parley.scm:603: history798799
> parley.scm:603: history798799
> parley.scm:610: ##sys#dynamic-wind
> parley.scm:610: history817818
> parley.scm:610: history817818
> parley.scm:615: get-next-char!
> parley.scm:579: parley-char-ready?
> parley.scm:586: append-while-incomplete
> parley.scm:560: string-null?
> parley.scm:561: repl-prompt
> parley.scm:561: g769 <--
> -----
>
> Sometimes I'll crash immediately and someytimes I have to press some
> keys when the "#;8>" prompt appears.
>
>
> If I run the above script thusly:
>
> -----
> $ csi -s memo-demo.scm
> -----
>
> I see
>
> -----
> $ csi -s ../memo-demo.scm
> 2.908s CPU time, 1.164s GC time (major), 75257 mutations, 22/1550 GCs
> (major/minor)
> 0s CPU time, 20 mutations
> -----
>
> ...and it hangs there (on the last time call) indefinitely using all the
> CPU. Ctrl-C doesn't terminate it: a call to 'killall csi' does tho'.
>
>
> If you cannot reproduce it then try varying the numbers in the call to
> memo-fact**.
>
>
>
> Is this a known bug in Chicken 4.9.0rc1 or the srfi-69 hash-tables that
> memoize uses?
>
>
> Thanks for any tips you can offer.
With CHICKEN 4.10.0 from the website the following works:
-----
(define x (time (memo-fact** 35710)))
(define x (time (memo-fact** 35720)))
(define x (time (memo-fact** 36030)))
-----
...but a slightly larger number hangs as before:
-----
(define x (time (memo-fact** 35710)))
(define x (time (memo-fact** 35720)))
(define x (time (memo-fact** 37030)))
-----
...Also, under CHICKEN 4.10.0, pasting things into csi with parley gives
errors:
-----
$ csi
CHICKEN
(c) 2008-2015, The CHICKEN Team
(c) 2000-2007, Felix L. Winkelmann
Version 4.10.0 (rev b259631)
linux-unix-gnu-x86-64 [ 64bit manyargs dload ptables ]
compiled 2015-08-04 on yves.more-magic.net (Linux)
; loading /home/local/andyjpb/.csirc ...
; loading /usr/local/chicken-4.10.0/lib/chicken/7/parley.import.so ...
; loading /usr/local/chicken-4.10.0/lib/chicken/7/chicken.import.so ...
; loading
/usr/local/chicken-4.10.0/lib/chicken/7/data-structures.import.so ...
; loading /usr/local/chicken-4.10.0/lib/chicken/7/extras.import.so ...
; loading /usr/local/chicken-4.10.0/lib/chicken/7/lolevel.import.so ...
; loading /usr/local/chicken-4.10.0/lib/chicken/7/miscmacros.import.so ...
; loading /usr/local/chicken-4.10.0/lib/chicken/7/ports.import.so ...
; loading /usr/local/chicken-4.10.0/lib/chicken/7/posix.import.so ...
; loading /usr/local/chicken-4.10.0/lib/chicken/7/srfi-1.import.so ...
; loading /usr/local/chicken-4.10.0/lib/chicken/7/srfi-13.import.so ...
; loading /usr/local/chicken-4.10.0/lib/chicken/7/srfi-18.import.so ...
; loading /usr/local/chicken-4.10.0/lib/chicken/7/srfi-71.import.so ...
; loading /usr/local/chicken-4.10.0/lib/chicken/7/stty.import.so ...
; loading /usr/local/chicken-4.10.0/lib/chicken/7/srfi-69.import.so ...
; loading /usr/local/chicken-4.10.0/lib/chicken/7/foreign.import.so ...
; loading /usr/local/chicken-4.10.0/lib/chicken/7/foreigners.import.so ...
; loading /usr/local/chicken-4.10.0/lib/chicken/7/parley.so ...
; loading /usr/local/chicken-4.10.0/lib/chicken/7/srfi-71.so ...
; loading /usr/local/chicken-4.10.0/lib/chicken/7/stty.so ...
#;1> (use numbers)
; loading /usr/local/chicken-4.10.0/lib/chicken/7/numbers.import.so ...
; loading /usr/local/chicken-4.10.0/lib/chicken/7/numbers.so ...
Error: (open-input-string) bad argument type - not a string: #f
Call history:
parley.scm:294: loop
parley.scm:291: reverse
list->string
parley.scm:291: string-split
parley.scm:292: values
list->string
parley.scm:591: call-with-input-string
parley.scm:595: peek-char
parley.scm:607: restore-terminal-settings
parley.scm:166: stty#set-terminal-attributes!
stty.scm:208: port?
stty.scm:208: port->fileno
parley.scm:612: call-with-current-continuation
parley.scm:612: with-exception-handler
parley.scm:612: ##sys#call-with-values
parley.scm:612: with-input-from-string <--
#;3>
-----
Regards,
@ndy
--
address@hidden
http://www.ashurst.eu.org/
0290 DA75 E982 7D99 A51F E46A 387A 7695 7EBA 75FF