interesting implementation. Could you please explain
Monad =: :[: ? is it equivalent in use to @:] ? ----- Original Message ----- From: David Lambert <b49p23t...@stny.rr.com> To: programming <programm...@jsoftware.com> Cc: Sent: Monday, March 3, 2014 2:29:35 PM Subject: [Jprogramming] Dictionary data type The standard answer to "Does J have a dictionary data type?" seems to be "Use symbols." (Two other answers today recommend locales.) To which we ask, "How do we use symbols?" Given that I may have overlooked a lab, I'll show my effort. My goal is to maintain a database of probabilities written in a standard long form. "P(a)" is an invalid j pronoun. I solve this with string keys mapped to symbols. J implements symbols with red-black trees. They're quickly accessed. The symbol values are indexes into a boxed list of values. This is my dict.ijs file. The note at the end gives example use. I've fancifully called the wikipedia "Encyclopedia Galactica", so the example refers to that of http://en.wikipedia.org/wiki/Posterior_probability . coclass 'dict' NB. implement associative array VALUE =: 0$a: Monad =: :[: symbol =: s:^:('literal'-:datatype) Monad NB. index'`literal' index =: 6&(s: symbol) Monad NB. may fetch multiple items, returns boxed items get =: (index { ".@:('VALUE'"_)) Monad NB. may fetch multiple items, opens the boxes! openGet =: >@:get Monad put =: dyad define KEY =. symbol y if. 1 (= #) KEY do. V =. < x else. assert KEY =&# x V =. ;/ x end. I =. index KEY L =. >: >./ I if. L (> #) VALUE do. VALUE =: (+:L){.VALUE end. VALUE =: V I} VALUE KEY ) cutSTRING =: #@:[ }.&.> , <;.1~ [ E. , assert ((,0);4 5 6 7) -: 1 2 3 cutSTRING i.8 embed =: >@:{.@:[ , ] , >@:{:@:[ assert 'bats' -: 'bs'embed'at' Filter =: (#~`)(`:6) assert 0 1 2 -: <&3 Filter i.6 assert 'SUPPER'-:<&(a.i.'a')Filter&.:(a.&i.)'SelectUPPERcase' getAllSymbols =: _6 s: [: i. s:~@:0: mp =: ($: |:@:+) :(+/ .*) NB. probability of pants, from law of total probability NB. y is the value for which to compute total probability NB. totalProbability =: openGet :: (verb define) NB. y is the value for which to compute total probability totalProbability =: verb define NB. returns P(y|CONDITIONi)P(CONDITIONi) assert 'P()' -: 1 2 _1 { y CONDITIONAL_GOAL =. '|'_1}y SYMBOLS =. getAllSymbols'' LITERALS =. ": SYMBOLS A =. ('`'~:{.&>) Filter CONDITIONAL_GOAL cutSTRING LITERALS B =. ({.~i.&')')&.>A NB. B are boxes of conditionals. PYI =. openGet;('`P(';')')&embed&.>B PXYI =. openGet;(CONDITIONAL_GOAL;')')&embed&.>B assert PYI -:&# PXYI y put~ PYI mp PXYI openGet y ) Note 'Encyclopedia Galactica: posterior probability' NB. wikipedia example on Tue Oct 22 15:18:33 EDT 2013 load'dict.ijs' D=:conew'dict' NB. probability student is a boy, complementary girl ((,-.)0.6)put__D'`P(B)`P(G)' NB. probability wearing pants given sex 1 0.5 put__D'`P(P|B)`P(P|G)' NB. compute and store probability to observe pants. EMPTY [ totalProbability__D'`P(P)' NB. Finally, Bayes Law. Find P(G|P). %/ ; openGet__D'`P(P|G)`P(P)`P(G)' 0.25 ) > Date: Mon, 3 Mar 2014 09:06:00 -0600 > From: Yike Lu<yikelu.h...@gmail.com> > To:programm...@jsoftware.com > Subject: Re: [Jprogramming] Sorry state of slow parsing of JSON in J > Message-ID: > <CAO=ap+cujrjnshftlhipnyzrk2mfrav_wak+-qzbl5vigee...@mail.gmail.com> > Content-Type: text/plain; charset=UTF-8 > > A tangential but related question: does J have a dictionary data type? > Where can I read about it? > > Thanks. ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm