(clear)

(deftemplate dataset
   (slot name)
   (multislot variables)
   (slot has-errors)
   (multislot errors)
)

(deffacts vt
  (dataset
    (name "test1")
    (variables "good" "6ad" "ug/y")
    (has-errors nil)))

(defglobal ?*varok* =
   (lambda (?var)
     (return (regexp "[\\p{Alpha}_}][\\p{Alnum}_.}]*" ?var))))

(deffunction filter-out (?lambda $?args)
    (bind ?res (list))
    (foreach ?arg $?args
       (if (not (call ?lambda ?arg)) then
           (bind ?res (list ?res ?arg))))
    (return ?res))

(defrule dataset-variables
    ?dataset <- (dataset (variables $?variables) (has-errors nil))
=>
    (bind ?errors (filter-out ?*varok* $?variables))
    (modify ?dataset
        (errors ?errors)
        (has-errors (> (length$ ?errors) 0) ))
)

(reset)
(run)
(facts)

-W


On 22 November 2010 16:12, Wolfgang Laun <wolfgang.l...@gmail.com> wrote:

> What about storing the list in another slot of variables?
>
> Also, the accumulate could be replaced by a Lisp function (filter)
> called in the consequence, the likes of which you might have seed in
> your lisping days. If you feel reckless, the actual filter can be
> passed in as a lambda.
>
> -W
>
>
> On 21 November 2010 20:07, Donald Winston <satchwins...@yahoo.com> wrote:
> >
> > (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
> > satchwins...@yahoo.com
> >
> >
> >
>
>
>
>
> --------------------------------------------------------------------
> To unsubscribe, send the words 'unsubscribe jess-users y...@address.com'
> in the BODY of a message to majord...@sandia.gov, NOT to the list
> (use your own address!) List problems? Notify owner-jess-us...@sandia.gov.
> --------------------------------------------------------------------
>
>

Reply via email to