In CVS procedure filter is defined twice:
dclass/dclass.scm: (define (filter p xs) ...
elf/iterate.scm: (define (filter keep? xs) ...
This causes a SchemeException (wrong type of argument)
if a program loads them in the wrong order, as
kanderson's plan.scm does.
http://openmap.bbn.com/~kanderso/plan/plan.html
Suggest renaming the dclass version, as it doesn't
appear to be a public/export of that module.
[Note: plan.scm and example.scm define distinctly named
plan.Filter and FILTER.
To get (showWords FILTER) to work,
1. reorder 'loads' so iterate.scm loaded after dclass.scm
(load "dclass/record.scm") ;; dclass/dclass.scm defines
procedure filter
(load "elf/basic.scm") ;; elf/iterate.scm must
override procedure filter
(load "elf/sort.scm")
2. in showWords, rename parameter filter to, say,
a-filter (but not call to procedure filter)
3. in showWords, rename .probability to .probability$
4. in showWords, rename wordProb to .probability$
(define (showWords a-filter)
;; Show each word and probability.
;; Don't let spamers see this!
(let ((fields (list .name$ .nSpam$ .nHam$
.probability$)))
(for-each (lambda (w) (print (map (lambda (f) (f
w)) fields)))
(sort (filter (lambda (w) (> (count w) MIN_COUNT))
(.words$ a-filter))
(comparator > .probability$)))))
Diff follows.]
32c32,33
< (load "elf/basic.scm")
---
> (load "dclass/record.scm") ;; dclass/dclass.scm
defines procedure filter
> (load "elf/basic.scm") ;; elf/iterate.scm must
override procedure filter
34d34
< (load "dclass/record.scm")
172c172
< (define (showWords filter)
---
> (define (showWords a-filter)
175c175
< (let ((fields (list .name$ .nSpam$ .nHam$
.probability)))
---
> (let ((fields (list .name$ .nSpam$ .nHam$
.probability$)))
178,179c178,179
< (.words$ filter))
< (comparator > wordProb)))))
---
> (.words$ a-filter))
> (comparator > .probability$)))))
Logged In: YES
user_id=17797
Thanks.
We usually get bug reports in jscheme-user@lists.sourceforge.net
and keep forgetting to check here. Sorry....
Logged In: YES
user_id=18278
This bug has been fixed.