On 18 September 2010 15:38, Ernest Friedman-Hill <ejfr...@sandia.gov> wrote:
> That's extremely close; the only problem is on the last line of the > defglobal: (?hash-set) is an attempt to call the function whose name is in > ?hash-set. That's not a function name, it's a map, so it doesn't work (the > error is "method name expected, as Jess tries to call a method on that > object). You want the progn to return "?hash-set", not "(?hash-set)" -- just > drop those parentheses and you're good to go. > > Another way to do this that would involve less typing: Jess lists turn into > arrays when passed to Java functions. So you could do this: > > (import java.util.*) > (defglobal ?*usps-state-code* = > (new HashSet (call Arrays asList (list "AL" "AK" "AS" ...)))) Better golfing: You can omit the quotes ;-) Actually, the difference between a Java HashSet and a Jess list isn't hefty, I've clocked this, and the list is slower by 15% only. This test was based on testing all list/set elements with equal frequency. Since this won't be true in reality, I have used a list ordered by decreasing population, and used a set of test cases where lookups were proportional to the distribution of the population. Then, there is no difference between a Jess list and HashSet. I compared these lookup functions: (deffunction testList (?sc) (member$ ?sc ?*sclist*)) (deffunction testSet (?sc) (?*scset* contains ?sc)) @Donald: Why is New York (NY) omitted from the list? -W > > > > > On Sep 18, 2010, at 9:24 AM, Donald Winston wrote: > > Why doesn't this work? >> >> (defglobal ?*usps-state-codes* = (progn >> (bind ?hash-set (new java.util.HashSet 59)) >> (call ?hash-set add "AL") (call ?hash-set add "AK") (call ?hash-set add >> "AS") (call ?hash-set add "AZ") >> (call ?hash-set add "CA") (call ?hash-set add "CO") (call ?hash-set add >> "CT") (call ?hash-set add "DE") >> (call ?hash-set add "DC") (call ?hash-set add "FM") (call ?hash-set add >> "FL") (call ?hash-set add "GA") >> (call ?hash-set add "GU") (call ?hash-set add "HI") (call ?hash-set add >> "ID") (call ?hash-set add "IL") >> (call ?hash-set add "IN") (call ?hash-set add "IA") (call ?hash-set add >> "KS") (call ?hash-set add "KY") >> (call ?hash-set add "LA") (call ?hash-set add "ME") (call ?hash-set add >> "MH") (call ?hash-set add "MD") >> (call ?hash-set add "MA") (call ?hash-set add "MI") (call ?hash-set add >> "MN") (call ?hash-set add "MS") >> (call ?hash-set add "MO") (call ?hash-set add "MT") (call ?hash-set add >> "NE") (call ?hash-set add "NV") >> (call ?hash-set add "NH") (call ?hash-set add "NJ") (call ?hash-set add >> "NM") (call ?hash-set add "NC") >> (call ?hash-set add "ND") (call ?hash-set add "MP") (call ?hash-set add >> "OH") (call ?hash-set add "OK") >> (call ?hash-set add "OR") (call ?hash-set add "PW") (call ?hash-set add >> "PA") (call ?hash-set add "PR") >> (call ?hash-set add "RI") (call ?hash-set add "SC") (call ?hash-set add >> "SD") (call ?hash-set add "TN") >> (call ?hash-set add "TX") (call ?hash-set add "UT") (call ?hash-set add >> "VT") (call ?hash-set add "VI") >> (call ?hash-set add "VA") (call ?hash-set add "WA") (call ?hash-set add >> "WV") (call ?hash-set add "WI") >> (call ?hash-set add "WY") >> (?hash-set))) >> >> (printout t (call ?*usps-state-codes* contains "VA") crlf) >> >> I need to have a global variable that will contain state code values after >> a (reset). list "AL" "AK" ... works but a HashSet would be more efficient. A >> jess list is not a collection so I can't use the HashSet(Collection) >> constructor. >> >> > --------------------------------------------------------- > Ernest Friedman-Hill > Informatics & Decision Sciences, Sandia National Laboratories > PO Box 969, MS 9012, Livermore, CA 94550 > http://www.jessrules.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. > -------------------------------------------------------------------- > >