In the section *SOUL versus PROLOG* of http://soft.vub.ac.be/Publications/2000/vub-prog-phd-00-02.pdf, the autor says:
When switching from SOUL to Prolog, we actually extended the SOUL system to > export all SOUL code in Prolog format. More recent versions of the SOUL > system include an option to use Prolog syntax instead of SOUL > syntax and to switch between both notations. All logic code fragments in > this dissertation are shown in Prolog-syntax It is currently possible to achieve this in Pharo? It so, could you please provide an example?. I could forget about the syntax and learn it if this is possible. Cheers, Jesus 2013/9/25 Jesus Nuñez <poissonbrea...@gmail.com> > Sorry, I hate its syntax, too verbose for my taste. What about dynamic > modules, DCG, CHR, CLP, performance in general?. What about > meta-programming, operator declarations. Do you really thing SOUL is a good > replacement for Prolog?, I do not see the expressiveness of Prolog > reflected in what I have seen. What about the libraries I mentioned for > semantic web? > > Think now about Prolog and the Helvetia approach, don't you thing it would > be much more attractive for newcommers or people who already knows Prolog? > If you put both approaches over the table I woudn't hesitate in taking the > Helvetia approach. > > Cheers, > Jesus > > > 2013/9/25 Jesus Nuñez <poissonbrea...@gmail.com> > >> OK I found it, I'll have a look >> >> >> 2013/9/25 Jesus Nuñez <poissonbrea...@gmail.com> >> >>> 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 >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>>> >>> >> >