← Back to team overview

opencog-dev team mailing list archive

Re: OpenCog Shell

 

Linas,

How much effort do you reckon it would be to extend this into a Scheme
front end for the Combo language that currently exists in the Novamente
core (which Moshe wrote a while back)?

Combo works and we've considered porting it to OpenCog, but the syntax
is not at all user-friendly...

For info on Combo, see the files

GeneralComboDescription < Novamente < TWiki.pdf
	
NovamenteComboDescription < Novamente < TWiki.pdf

which I extracted from the internal Novamente twiki site and pasted to

http://groups.google.com/group/opencog/files?hl=en

-- Ben


On Mon, May 26, 2008 at 9:25 PM, Linas Vepstas <linasvepstas@xxxxxxxxx> wrote:
>
> 2008/5/25 Moshe Looks <madscience@xxxxxxxxxx>:
>
>> Sorry to hear that swig didn't live up to expectations. How long ago
>> was this? Its possible that things have improved since, as development
>> seems fairly active...
>
> Yes, my comments are indeed rather dated. I guess the thing
> to do would be to go ahead and try it. I look forward to
> status reports!
>
>>> Myself, I'm partial to scheme+guile.
>
> Being impatient, and also having a real need, I took a
> couple of days, and whipped together a very simplistic
> interface. It allows me to create new nodes, and delete them.
>
> (I needed a shell for debugging, since some of my code
> takes so long to run, that I'd rather hand-edit any mistakes,
> than restart the code.)
>
> README below ...
> If anyone plans to use this besides me, let me know.
>
>                        Scheme Scripting
>                        ----------------
>
>                    Linas Vepstas, May 2008
>
>
> This directory contains an implementation of the a Scheme shell for the
> OpenCog server.  Scheme is a dialect of Lisp; the shell allows scheme
> code to manipulate the contents of an OpenCog AtomSpace. The shell
> may be invoked by typing "scm" at the opencog prompt. Currently, only a
> small number of primitives have been implemented.
>
> This binding is intended to be used for day-to-day maintenance
> activities, and for experimentation. it is not meant to be used for any
> sort of serious calculation, simply because it is not (and cannot be) a
> high-performance interface. The shell is implemented in guile; guile is
> an interpreter, not a compiler. There is no bytecode or virtual machine.
>
> Functions:
>
>   cog-new-node node-type node-name
>      Create a new node of the given type and name
>
>      Throws errors if node-type is not a valide atom type for a node,
>      and if node-name is not a string.
>      Example:
>          (cog-new-node 'ConceptNode "some node name")
>          creates a new node, and prints its value:
>          #<node[3:some node name] sti:(0,0) tv:(0.000000,0.000000)>
>
>
>   cog-new-link link-type atom-list
>      Create a new link, with the given atoms in the link.
>
>      Throws errors if the link type is not a valid opencog link type,
>      or if the list contains items other than atoms.
>
>      Example:
>          (define x (cog-new-node 'ConceptNode "abc"))
>          (define y (cog-new-node 'ConceptNode "def"))
>          (cog-new-link 'Link (list x y))
>
>          creates a new link, and prints it:
>          #<link[2 sti:(0,0) tv:(0.000000,0.000000) <[3 abc],[3 def]>]>
>
>   cog-atom handle
>      Reference the atom identified by the numeric handle
>   cog-handle atom
>      Return the handle of the atom
>
>      Example:
>         (define x (cog-new-node 'ConceptNode "abc"))
>         (define y (cog-new-node 'ConceptNode "def"))
>         (cog-handle x)
>         113
>         (cog-handle y)
>         114
>         (cog-atom 114)
>         #<node[3:def] sti:(0,0) tv:(0.000000,0.000000)>
>
>
>   cog-incoming-set atom
>   cog-outgoing-set atom
>      Return the incoming and outgoing sets, respectively, of the atom.
>
>      Example:
>         (define x (cog-new-node 'ConceptNode "abc"))
>         (define y (cog-new-node 'ConceptNode "def"))
>         (define l (cog-new-link 'Link (list x y)))
>         (cog-incoming-set x)
>         (#<link[2 sti:(0,0) tv:(0.000000,0.000000) <[3 abc],[3 def]>]>)
>         (cog-incoming-set y)
>         (#<link[2 sti:(0,0) tv:(0.000000,0.000000) <[3 abc],[3 def]>]>)
>         (equal? (cog-incoming-set x) (cog-incoming-set y))
>         #t
>
>   cog-delete atom
>      Delete the indicated atom, but only if it has no incoming links.
>   cog-delete-recursive atom
>      Delete the incoming atom, and all atoms that point at it.
>
>      Example:
>         (define x (cog-new-node 'ConceptNode "abc"))
>         (define y (cog-new-node 'ConceptNode "def"))
>         (define l (cog-new-link 'Link (list x y)))
>
>         (cog-delete x)
>         ERROR: In procedure cog-delete:
>         ERROR: Wrong type argument in position 1 (expecting atom with
> empty incoming set): #<atom>
>         (cog-delete-recursive x)
>         nil
>         l
>         Invalid handle
>         x
>         Invalid handle
>         y
>         #<node[3:def] sti:(0,0) tv:(0.000000,0.000000)>
>
>         Note that x and the link l point to have been deleted,
>         but not the link y.
>
> --~--~---------~--~----~------------~-------~--~----~
> You received this message because you are subscribed to the Google Groups "OpenCog.org (Open Cognition Project)" group.
> To post to this group, send email to opencog@xxxxxxxxxxxxxxxx
> To unsubscribe from this group, send email to opencog-unsubscribe@xxxxxxxxxxxxxxxx
> For more options, visit this group at http://groups.google.com/group/opencog?hl=en
> -~----------~----~----~----~------~----~------~--~---
>
>



-- 
Ben Goertzel, PhD
CEO, Novamente LLC and Biomind LLC
Director of Research, SIAI
ben@xxxxxxxxxxxx

"If men cease to believe that they will one day become gods then they
will surely become worms."
-- Henry Miller



References