From: Robin L. P. <rlp...@di...> - 2008-08-11 02:50:07
|
Brand new to Series, but it seems like my sort of thing; I always kind of enjoyed the lazy evaluation stuff that Haskell did. For this particural bit of code, I'm starting with finite lists and digging through them to find sub-sections. I'm a little surprised by some of the warnings I'm getting, and I'm hoping someone can shed some light on these. Everything seems to be working just fine, for the record. Restriction violation 12 in series expression: NIL Series var INITIAL-SER referenced in nested non-series LAMBDA. WARNING: Warning 28 in series expression: (COLLECT-FIRST X) Non-series to series data flow from: X to: (COLLECT-FIRST X) The goal of the function in question is to turn a (finite) series into a series of all the possible sub-series; there are *no* non-series calls in the function: (defun subseries-all (start-ser) (DECLARE (OPTIMIZABLE-SERIES-FUNCTION)) (multiple-value-bind (index-ser initial-ser) (cotruncate (scan-range) start-ser) (mapping ((x index-ser)) (subseries initial-ser x)))) Just to be clear, initial-ser and start-ser should be the same in all respects; I couldn't figure out any other way to get a 0-to-n series of the same length as start-ser. There's no way I can see to get the legth of a finite series. WARNING: Warning 28 in series expression: (DEFUN SPATH-FIND (SER ITEM) (DECLARE (OPTIMIZABLE-SERIES-FUNCTION)) (CHOOSE-IF #'(LAMBDA (X) (FORMAT T "val: ~A~%" X) (EQUAL ITEM (COLLECT-FIRST X))) (SUBSERIES-ALL SER))) Non-series to series data flow from: (SUBSERIES-ALL SER) to: (CHOOSE-IF #'(LAMBDA (X) (FORMAT T "val: ~A~%" X) (EQUAL ITEM (COLLECT-FIRST X))) (SUBSERIES-ALL SER)) WARNING: Restriction violation 13 in series expression: (COLLECT-FIRST (SPATH-FIND (SCAN '(B 3 C 1 B 5)) 'B)) Series to non-series data flow from: (SCAN '(B 3 C 1 B 5)) to: (SPATH-FIND (SCAN '(B 3 C 1 B 5)) 'B) Both of these come from the same function, spath-find, helpfully printed there in its entirety. The point of the choose-if predicate (ignoring the format call) is to compare the first item of the series (remember, subseries-all returns a series of series) to a given value. I'm quite surprised by the total lack of accessors; there's no way that I can see to get at the first element of the sub-series there at all without converting out of series mode and getting those warnings. I'm hoping someone can show me something I missed. Thanks. -Robin -- Lojban Reason #17: http://en.wikipedia.org/wiki/Buffalo_buffalo Proud Supporter of the Singularity Institute - http://singinst.org/ http://www.digitalkingdom.org/~rlpowell/ *** http://www.lojban.org/ |