where is it??
2013/9/25 Stéphane Ducasse <stephane.duca...@inria.fr> > did you look at SOUL? > > Stef > > On Sep 25, 2013, at 9:15 PM, Jesus Nuñez <poissonbrea...@gmail.com> wrote: > > In my very first attempt, I tried to port a package which sounds to me > like the one you describe. In the examples there was a snoopy world as a > search example, maybe you recall it from that. However I realized that I > didn't want to emulate Prolog in Pharo; nothing like fast compiled and > optimized code for WAM. > > The idea was to emulate the language boxes of Helvetia to mix Prolog and > Smalltalk code and use NativeBoost to call the swi-prolog shared library, > so I could use a highly deployed version of Prolog. Some time ago I made > an inquiry and for handling some text highlighting issues that would help > in my aims, just for a direct reference, the code is below: > > | text textRenderer textShower | >> text := 'p(Q,R):-q(R), unify_st(X, smalltalk_code), r(T). >> q(Q):-d(R). >> q(Q).'. >> textRenderer := [ >> PPTextHighlighter new >> parser: PPPrologParser new; >> color: 'small_atom' with: Color blue muchDarker; >> bold: 'small_atom'; >> color: 'unify_st' with: Color green muchDarker; >> bold: 'unify_st'; >> color: 'string' with: Color gray muchDarker; >> color: 'number' with: Color gray muchDarker; >> color: 'boolean' with: Color gray muchDarker; >> highlight: text asText. >> ]. >> " __ >> | >> <Renders IN> >> | >> W >> GLMTextPresentation >> | >> <Renders IN> >> | >> W >> GLMMorphicRenderer >> >> " >> textShower := GLMMorphicRenderer new. >> (textShower open: ( >> GLMTextPresentation new display: textRenderer; renderGlamorouslyOn: >> textShower; yourself )) window title: 'Prolog Editor'. >> "Here I created a highlighter through the transform method of the grammar" >> grammar := PPPrologParser new. >> highlighter := grammar transform: [ :parser | >> Transcript show: parser. >> parser class = TokenParser >> ifTrue: [ parser ==> [ :token | >> textShower model highlight: token style range: token interval ] ] >> ifFalse: [ parser ] ]. >> text := 'p(Q,R):-q(R), unify_st(X, smalltalk_code), r(T). >> q(Q):-d(R). >> q(Q).'. >> pp := highlighter parse: text asText. > > > > However, as I said, it was too much work to create everything from > scratch, so I decided only to impose queries and the result looks pretty > much as the code I provided in my previous post. > > > I omitted one detail however; I am using a python bridge through the pyswi > library which does pretty much was I was trying to achieve with > NativeBoost. It is a RPC-JSON server which handles the interaction between > Pharo and Prolog and retrieves the query results in a JSON dictionary. > > At about that time I also was looking at Logtalk (logtalk.org) for SWI >> and maybe waiting for XSB ... as our manager would not go for iLOG and we >> were VisualWorks only ... then IBM bought iLOG and something odd happened >> to Prologia with Air Liquide in France. > > > Logtalk is pretty much what I wanted to achieve, but the OOP language > would be Pharo instead. I still think it would be good to make some effort > towards creating such a framework, if I can call it like that. > > You may know about the prolog for Smalltalk/DOS of about 1990 vintage ... >> I must have it on a floppy in a box somewhere on a shelf. > > > I would be interesting to have a look. Please send me a copy to this email > if you find it. > > Cheers, > Jesus > > > > 2013/9/25 Robert Shiplett <grshipl...@gmail.com> > >> You may know about the prolog for Smalltalk/DOS of about 1990 vintage >> ... I must have it on a floppy in a box somewhere on a shelf. >> >> R >> >> >> On 25 September 2013 10:29, Jesus Nuñez <poissonbrea...@gmail.com> wrote: >> >>> I'll try to elaborate but what I can say is only from my limited >>> perspective. You can take it as an incomplete argument that needs much >>> refinement, but could however serve as a seed for an upcoming idea. >>> >>> Search: After all we can see the entire web as a large graph which we >>> seek to traverse, looking for information. First-order logic is the most >>> neutral and natural way of representing the web. With facts and rules that >>> convolve to derive new conclusions, logic is perhaps the most compact way >>> of representing pretty much any kind of relationships. >>> >>> Think of a model for a situation that would accept a query as below with >>> some facts and rules governing the dynamics of the underlying world: >>> >>> *"Give me all restaurants in the city where someone whose name is Laura >>> has been a client at least once per month during the last 3 months and >>> whose has always paid with credit card"* >>> >>> My opinions are based on the power of tools in Pharo, such as the moose >>> family for data visualization and related stuff and of course Seaside, >>> together with Prolog first order logic syntax, unification, backtracking >>> capabilities, and search based on a sound resolution method. In the case of >>> the use of Prolog for the semantic web, see for instance >>> http://attempto.ifi.uzh.ch/site <http://attempto.ifi.uzh.ch/site/docs/> >>> . >>> >>> Prolog counts also with mature semantic web packages >>> http://www.swi-prolog.org/web/ that handles the semantic web RDF model >>> naturally. For instance have a look at http://www.semanticweb.gr/topos/. >>> In this very application you may also discover how Pharo can naturally fit >>> in a similar application. >>> >>> In a personal attempt (indeed it is part of my master thesis); since I >>> am in Pharo 1.4, I wanted to emulate the helvetia language boxes, to create >>> rules in Pharo and interact with Prolog as in the example below for a SQL >>> language box, >>> >>> rows := *SELECT * FROM users WHERE username = @(aString ~= >>> /\s*(\w+)\s*/)* >>> >>> I created a parser in PetitParser for Prolog, however It was too much >>> work to create something as the above from scratch (also somewhat involved >>> is to handle operator declaration in Prolog) and finally I end up with a >>> tool for imposing only queries to Prolog and retrive the results in a JSON >>> dictionary using SocketStream for RPC handling and NeoJSONReader to read >>> the JSON contents from the stream. >>> >>> Just for reference, it looks as follows, >>> >>> Transcript open. >>> stream := SocketStream openConnectionToHostNamed: 'localhost' port: >>> 31415. >>> [ >>> text:='{"method":"query", "params": ["owns_Zebra(O,X)"], "id":0}'. >>> stream nextPutAll:text; flush. >>> Transcript cr; show:(stream upToEnd). >>> ] ensure: [ >>> stream close >>> ] >>> >>> map := (NeoJSONReader on: (result contents) readStream ) >>> next. >>> >>> Again, it is only my limited view, and I am only starting to understand >>> the fundamentals of semantic web but I think it is not a bad idea to create >>> a productive conjunction of this two wonderful worlds. So please don't >>> blame on me if I am wrong in all of my thoughs, >>> >>> Cheers, >>> Jesus >>> >>> >>> >>> >>> >>> >>> 2013/9/25 Norbert Hartl <norb...@hartl.name> >>> >>>> >>>> Am 25.09.2013 um 13:02 schrieb Jesus Nuñez <poissonbrea...@gmail.com>: >>>> >>>> What did happen to Helvetia? Sorry if I am an ignorant here but I think >>>> language boxes in Pharo; to interac, remarkably with Prolog, would be >>>> definitely a plus for semantic web development in Smalltalk. >>>> >>>> Cheers >>>> >>>> Sounds interesting. Can you elaborate on that? How could all of those >>>> mentioned support the semantic web? [1] >>>> >>>> Norbert >>>> >>>> [1] http://en.wikipedia.org/wiki/Semantic_Web >>>> >>>> >>>> >>>> >>>> 2013/9/25 Norbert Hartl <norb...@hartl.name> >>>> >>>>> Looking for semantic web tools I found >>>>> >>>>> http://www.squeaksource.com/TripleStore/ >>>>> >>>>> Are there other resources for the semantic web in pharo? smalltalk? >>>>> >>>>> Norbert >>>>> >>>> >>>> >>>> >>> >> > >