1. Чистые функции:

2. Функции первого класса и высшего порядка:

# Определение функции, которая прибавляет единицу
# к каждому элементу списка
def inc(L):
  return [x + 1 for x in L]

# Функция, которая принимает функцию в качестве
# аргумента и возвращает другую функцию
# в качестве результата
def changeList(f, L):
  return f(L)

# changeList(f, L) = f(L)
>>> changeList(inc,)

# Хранение функции в переменной
>>> c = changeList
>>> c(inc,)

# Хранение функций в структурах данных
# предоставляемых языком. В данном случае, хранение
# анонимных функций в словаре.
hashIncDec = {
  'inc': lambda x: x + 1,
  'dec': lambda x: x - 1
}
>>> hashIncDec['inc'](5)
6
>>> hashIncDec['dec'](5)
4

В Scheme:

;; Определение функции, которая прибавляет единицу
;; к каждому элементу списка
(define (inc-list L)
  (map 1+ L))

;; Функция, которая принимает функцию в качестве
;; аргумента и возвращает другую функцию
;; в качестве результата
(define (change-list f L)
  (f L))

scheme@(guile-user)> (change-list inc-list '(1 2 3))
$1 = (2 3 4)

;; Хранение функции в переменной
(define c change-list)
scheme@(guile-user)> (c inc-list '(1 2 3))
$2 = (2 3 4)

;; Хранение функций в структурах данных
;; предоставляемых языком. В данном случае, хранение
;; анонимных функций в хеш-таблице.
(define hash-inc-dec (make-hash-table))
(hash-set! hash-inc-dec 'inc (lambda (x) (+ x 1) ))
(hash-set! hash-inc-dec 'dec (lambda (x) (- x 1) ))

scheme@(guile-user)> ((hash-ref hash-inc-dec 'inc) 5)
$3 = 6
scheme@(guile-user)> ((hash-ref hash-inc-dec 'dec) 5)
$4 = 4

В этих примерах функции inc, inc-list, changeList и change-list демонстрируют принципы функций первого класса и высшего порядка. Они передаются как аргументы, возвращаются как результаты и сохраняются в переменных.

3. Замыкания:

# Замыкание
def sum(x):
  def sumXY(y):
    return x + y
  return sumXY

>>> s = sum(10)
>>> result = s(5)
>>> result
15

*   Scheme:

;; Замыкание
(define (sum x)
  (lambda (y)
    (+ x y)))

(define sum-x-y (sum 10))

scheme@(guile-user)> (sum-x-y 5)
$1 = 15

4. Каррирование: