# Cog-evaluate!

The ** cog-evaluate!** function is a scheme function that is able to evaluate EvaluationLinks and return a TruthValue and is part of

` (opencog exec) `

module. This page attempts to explain what `cog-evaluate!`

does today. This may change over time. `cog-evaluate`

should be distinguished from `cog-execute!`

, which is able to execute functions that return an Atom, and from `cog-reduce!`

, which is able to reduce expressions to normal form.
There are two basic types of links that can be evaluated: "black-box" links, and "clear-box" links. Black-box links can execute arbitrary scheme or python code (returning a TruthValue). Because of this, black-box links cannot be reasoned over, or reduced. Examples of "clear-box" evaluatable links include GreaterThanLink and EqualLink. Evaluatable links can be composed with AndLink, OrLink and NotLink to propage crisp-logic boolean truth values.

At this time, `cog-evaluate!`

can evaluate all clear-box links, and those EvaluationLinks that use a GroundedPredicateNode to specify a scheme or python function to evaluate.

## Example

(cog-evaluate! (GreaterThanLink (PlusLink (NumberNode 2) (NumberNode 2)) (TimesLink (NumberNode 3) (NumberNode 0.5))))

will yield

(stv 1 1)

when evaluated at the guile prompt.

## Future directions

Both atoms and truth values are special cases of values. As such, cog-evaluate could be updated to return values in general, and therefore, return both truth values and atoms as special cases. Exactly how this could work is not yet known.