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

Reply via email to