lang-model/ast/operators.lisp

98 lines
2.6 KiB
Common Lisp
Raw Permalink Normal View History

2017-05-09 20:21:22 +00:00
;; Properties
(defun exists (object)
"The object is not unexistent."
(list ' object))
(defun property (element property)
"Evaluates a given property of an object."
(list element "." property))
(defun capacity (element capacity)
"Evaluates a given capacity (skill) of an element."
(list element "||" capacity))
(defun quantity (elements)
"Evaluates the quantity of the results of an operator."
(list 'count elements))
(defun pertenence-to-group (element group)
"Evaluates the pertenence of the element to a group."
(list element "∈" group))
(defun (setf pertenence-to-group) (result object value)
'todo=create-virtual-node)
(defun during (time events)
"Evaluates the events during some condition."
(list 'while "(" time ")" events))
(defun is-equal (pred1 pred2)
"Evaluetes the equality of two predicates."
(list pred1 "=" pred2))
(defun verb (verb-name subject)
"Applies a vert to a subject."
(list verb-name (list subject)))
;; Algebra
(defun product (times element)
(list 'times times element))
;; Time
(defun time-frame (time value)
"Evaluates a value during a time-frame."
(list 'time time '\, value))
;; Evaluation
(defun some-element-which-complies-with (var condition)
"Evaluates if some element complies with a condition."
(list 'some var '\, condition))
(defun all-element-complies-with (var condition)
"Evaluates if some every complies with a condition."
(list 'all var '\, condition))
(defun q-and (pred1 pred2)
"Evaluates the intersection of two predicates."
(list 'and pred1 pred2))
(defun q-or (pred1 pred2)
"Evaluates the union of two predicates."
(list 'or pred1 pred2))
(defun q-not (pred)
"Evaluates the negation of a predicate."
(list 'not pred))
;;;; Composed
(defun exists-property-with-value (object value)
"Evaluates the existence of a property with a given value in the object."
(exists
(some-element-which-complies-with
'P
(is-equal value
(property object 'P)))))
(defun (setf exists-property-with-value) (result object value)
'todo=create-virtual-node)
(defun element-of-group-has-property (element group prop)
"Evaluates the existance of a property in the object, given the pertenence to a group."
(q-and
(pertenence-to-group element group)
(exists (property element prop))))
(defun all-element-of-group-complies-with (element group condition)
"Evaluates the compliance of a given condition given the pertenence to a group."
(all-element-complies-with
element
(q-or
(q-not (pertenence-to-group element group))
condition)))
(defun implies (a b)
(q-or (q-not a)
b))