## Function symbol

It is possible to obtain and execute symbols of previously defined functions. Function symbols can be obtained with `#'`, being correspondent to function pointers in C.

## Anonymous function (lambda)

Using the function symbol, it is possible to create and apply functions at the same time.

Regular function definition looks like:

``````(defun funcname (args) (do-something))
``````

Anonymous functions can be defined with:

``````#'(lambda (args) (do-something))
``````

## sort

`sort` is a function that sorts a list according to an evaluation function, which is given using the function symbol.

For example, try to execute the following:

``````(setq *ls* (list 0 3 1 2))
(print (sort *ls* #'<))
(print (sort *ls* #'>))
``````

The first sort uses the function `<`, sorting in crescent order. The second sort uses the function `>`, sorting in decreasing order.

Please note that `sort` is destructive, causing the given variable to be changed.

## mapcar

`mapcar` applies given function symbol to all elements of a list.

In the following example, a lambda function that returns twice the input is given to double the value of all elements from the list.

``````(mapcar #'(lambda (x) (* 2 x)) (list 0 3 1 2))
;; (0 6 2 4)
``````

## funcall

`funcall` executes the given function symbol.

The next example shows a function that takes two values and a comparison function symbol `func`. If the result of executing `func` with the two values is non-nil it returns the first, else it returns the second value.

``````(defun numcheck (a b func) (if (funcall func a b) a b))
``````

Try out and check the following results.

``````(numcheck 0 1 #'<)  ;; 0
(numcheck 0 1 #'>)  ;; 1
``````