- List of Backups
- View the diff.
- View the diff current.
- View the source.
- Go to Hyperlinks.
*1 (2011-06-09 (Thu) 04:08:38)*- 2 (2011-06-09 (Thu) 05:56:32)
- 3 (2011-06-10 (Fri) 15:20:45)
- 4 (2011-06-12 (Sun) 03:16:30)

LMNtal links represent point-to-point connection between atoms and form an ordinary graph. In some applications, however, we may want *hyperlinks*, namely links that interconnect more than two atoms and form a *hypergraph*.

LMNtal provides syntax and operations for hypergraphs, which will be described below. Currently, hyperlinks are supported by the slim runtime in the ordinary (as opposed to non-deterministic) execution mode.

- A hyperlink is created by a "new" construct specified in a guard.

hoge. hoge :- new($h) | a($h), b($h). *--> a(!1), b(!1).

- hlink($x)

a(!1). a($x) :- hlink($x) | b($x). *--> b(!1).

- Two hyperlinks can be merged into one using the "><" operator.

a(!1), b(!2). a($x), a($y) :- $x \= $y | a($x), b($y), $x >< $y.

- If $x and $y represent different hyperlinks, they will be merged into one.

- The "num" construct in a guard will return the number of occurrences of the specified hyperlink.

a(!1), b(!1). a($h) :- $n = num($h) | number($n). *--> b(!1), number(2).

- Another use
a(!1). a($h) :- $n = num($h), $n < 5 | a($h), a($h). *--> a(!1), a(!1), a(!1), a(!1), a(!1).

- Yet another use
flag(!1), a(!1), a(!1), a(!1), a(!1). a($h) :- hlink($h) | . flag($h) :- $n = num($h), $n =:= 1 | ok. *--> ok. // ok is created when all a(!1)'s are removed

- Thus, using hyperlinks, one can check the absence of a particular atom.

The following type constraints can be used in guards. The + (input) sign preceding a process context name means that the name should appear in the head, while the - (output) sign means that the name should not appear in the head.

- '='(+$u,-$v)
- make sure that $u[X] and $v[Y] are unary atoms with the same name.
- '='(-$u,+$v)
- same as above.
- '=='(+$u,+$v)
- check if $u[X] and $v[Y] are unary atoms with the same name.
- unary(+$u)
- check if $u[X] is a unary atom.
- ground(+$g)
- check if $g[X1,...,Xn] (n>0) is a connected graph whose free links are exactly X1,...,Xn.
- int(+$i)
- check if $i[X] is an integer.
- float(+$f)
- check if $f[X] is a floating-point number.
- int(+$float,-$int)
- cast.
- float(+$int,-$float)
- cast.
- 345(-$int)
- defined for every integer (not only with 345).
- '-3.14'(-$float)
- defined for every float.
- '<'(+$int,+$int)
- integer comparison; also:
**'>'**,**'=<'**,**'>='**,**'=:='**,**'=\='**. - '+'(+$int,+$int,-$int)
- integer operation; also:
**'-'**,**'*'**,**'/'**,**mod**. - '<.'(+$float,+$float)
- float comparison; also:
**'>.'**,**'=<.'**,**'>=.'**,**'=:=.'**,**'=\=.'**. - '+.'(+$float,+$float,-$float)
- float operation; also:
**'-.'**,**'*.'**,**'/.'**. - uniq(+$g1,...,+$gn)
- uniqueness constraint; checks if the rule has not been applied to the tuple $g1[X1], ..., $gn[Xn] (n>=0).