Уводни функции в Лисп (Lisp)


Сума на числата 1,2,3,4
(+ 1 2 3 4)
връща: 10

Математическата функция (3*(2+6))/3
(/ (* 3 (+ 2 6)) 3)
връща: 8
Коментари в Lisp се поставят след точка със запетая
Пример:
;comment

Дефинира променлива a = 5
(define a 5)

Дефинира функция square, което връща квадрата на число:
(define (square x) (* x x))
Вика се: (square 5)
Връща: 25

Генератор за поредица от числа с действие accumulare:
Пример:
1*2*3*4*…*20 или 1+3+5+7+..+100

(define (accumulate start end init_value term_filter term combinator)
    (if (> start end) init_value
        (if (term_filter start)
             (combinator (term start)  
                 (accumulate (+ start 1) end init_value term_filter term combinator))
             (accumulate (+ start 1) end init_value term_filter term combinator))))

Пример за използване:
always_true винаги ще връща истина
identity ще връща подадения параметър
square връща квадрата на променливата
f която връща сумата 4+16+36+…+n*n или 4+16+36+…+(n-1)*(n-1) (където n или n-1 е четно. Използва се „(f 10)“)
f2 която връща сумата 1+2+…+n (използва се „(f2 10)“)
nf ще връща 1*2*…*n (използва се „(nf 10)“)
functe връща (x^n)/(n!)
ex връща e^x или натуралното число e на степен x (използва се „(ex 2)“)

(define (always_true x) #t)
(define (identity x) x)
(define (square x) (* x x))

(define (f n)
  (accumulate 1
              n
              0
              even?
              square
              +))
(define (f2 n)
  (accumulate 1
              n
              0
              always_true
              identity
              +))
(define (nf n)
  (accumulate 1
              n
              1
              always_true
              identity
              *))
(define (functe x n) (/ (expt x n) (nf n)))
(define (ex x)
  (define (term n) (functe x n))
    (accumulate 1
                100
                1
                always_true
                term
               +))
(ex 2)
  1. Няма коментари.
(will not be published)