JESS: multislot pattern matching using "accumulate"
"Donald Winston" <[email protected]>
| Newsgroups | gmane.comp.java.jess |
|---|---|
| Message-ID | <10175_1290437386_oAMEmnt9014166_8F1036F7-6EF8-4FBF-B4BC-4F5311CD503B@yahoo.com> |
(defrule VALIDATE:dataset-variables
(page "edit-dataset.xslt")
?dataset <- (dataset (variables $?) (has-errors FALSE))
?errors <- (accumulate (bind ?list (new java.util.ArrayList))
(?list add ?var)
?list
(dataset (variables $? ?var&:
(not (regexp "^[a-zA-Z_][a-zA-Z0-9_\\.]*$" ?var)) $?)))
=>
(printout t "errors = " (?errors toString) crlf)
(modify ?dataset
; TODO: set variablesErrors for each variable in ?errors"
(has-errors TRUE)))
It looks like this works and is very cool but if I have more then one dataset how do I get the ?dataset and ?errors to correlate?
test-facts.clp
...
(page "edit-dataset.xslt")
(dataset
(name "testdata")
(nobs "120")
(nvars "10")
(variables "X1" "X-2" "X3")
(submitEditDatasetForm "Submit"))
...
This copy of Jess will expire in 106 day(s).
executing...
errors = [X-2]
f-0 (MAIN::initial-fact)
f-1 (MAIN::nextPage "edit-dataset.xslt")
f-2 (MAIN::R nil)
f-3 (MAIN::subscription-prices (maxDataElements 500) (monthlyPrice 25) (yearlyPrice 100))
f-4 (MAIN::upload-info (uploadDirectory "/tmp/Rserv") (filename "test.csv") (contentType "text/plain") (contentTypeError "") (length 53) (format "fwf") (separationChar ",") (columnWidths "2 8 10 5 15") (hasColumnNames "TRUE") (submitUploadForm nil) (submitDatasetForm nil) (submitShowDatasetForm nil) (has-errors FALSE))
f-5 (MAIN::page "edit-dataset.xslt")
f-6 (MAIN::dataset (name "testdata") (nameError "") (nobs "120") (nvars "10") (variables "X1" "X-2" "X3") (variableErrors ) (variableTypes ) (submitEditDatasetForm "Submit") (has-errors TRUE) (isFree TRUE))
f-7 (MAIN::purchase-info (creditCardNumber "1408 0412 3456 7893") (creditCardNumberError "") (creditCardType "") (securityCode "143") (securityCodeError "") (expirationDate "05-2010") (expirationDateError "") (nameOnCard "Donald P Winston") (nameOnCardError "") (subscription nil) (subscriptionError "") (submitPurchaseSubscriptionForm nil) (has-errors FALSE))
For a total of 8 facts in all modules.
Donald Paul Winston
[email protected]