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. 
> 
> 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
>> 
> 
> 
> 
> 

Reply via email to