-
Notifications
You must be signed in to change notification settings - Fork 40
Narsese
ONA's syntax is mostly compatible with OpenNAR's: https://github.com/opennars/opennars/wiki/Narsese-Grammar-(Input-Output-Format) Most of Narsese is supported, but there are minor differences:
task ::= sentence
sentence ::= belief | question | goal
belief ::= statement '. [tense] [truth]
goal ::= statement '! [tense] [desire]
question ::= statement '? [tense]
statement ::= compound-statement [ copula compound-statement ]
copula ::== '--> | '<-> | '==> | '=/> | '=|>
compound-statement ::= ['!] compound-term [ statement-operator compound-term ] // Infix
| ['!] statement-operator compound-term compound-term // Prefix
statement-operator ::= '&& | '&/ | '&|
compound-term ::= term [ term-operator term ] // Infix
| term-operator term term // Prefix
term-operator ::== '& | '| | '- | '~ | '* | '/1 | '/2 | '\1 | '\2
term ::= ['^] word | set | var | ( statement ) | < statement >
set ::= '{ term [term] '} | '[ term [term] ']
var ::= '$ word | '# word | '? word
word ::= { letter | digit | _ | ” | ' }+
truth ::= '{ float float '}
desire ::= '{ float float '}
tense ::= ':|: //indicating "current time"
Images
(/,rel,_,b)
has to be written as
(rel /1 b)
, and image as
(/,rel,a,_)
as
(rel /2 a)
, same for \ with \1 and \2.
Intervals
Intervals, to measure expected time distances between events, are always learned by ONA and stored as meta-data, they are not part of the Narsese I/O format anymore. Hence a sequence
(&/,a,+5,b)
becomes
(&/,a,b)
or
(a &/ b)
and also the interval for implications is not used anymore.
Operators
The syntactic sugar
(^op,arg_1,...,arg_n)
is not supported anymore, instead the full notation has to be used which is supported by both systems:
<(*,arg_1,...,arg_n) --> ^op>
though for operations without arguments, the following shortcut can be used:
^op
Restrictions
1.
Copulas in ONA are binary, since it's using an array-based heap for terms. While there are ways to encode n-ary relations in a binary heap, the ONA philosophy, following KISS, encourages the use of left-nesting, which is also used by the system itself to compose sequences of events:
((a &/ b) &/ c).
2.
The parallel temporal copula &| is not implemented, please use &/ for now, again due to KISS. If the order does not matter in some background knowledge we want to give the system, in addition to
<(a &/ b) =/> c>
also give it
<(b &/ a) =/> c>
to achieve the same as with &| for now.
Optional syntactic improvements
The ONA parser does not require commas, and doesn't distinguish between < and (, also it supports infix format.
<(|,a,b) --> M>.
can be written as
<(a | b) --> M>.
or even as
((a | b) --> M).
Note: Spaces cannot be omitted.
Custom truth values
These can be added by appending {0.0 0.9} or alternatively in the old OpenNARS format %0.0;0.9%, for frequency 0.0 and confidence 0.9.