Элементы языка Scheme

Содержание

Типы данных:

целые числа
1 , -31433423 ,
вещественные числа
3.14 , 2.718 ,
рациональные числа
(/ 1 2)
логические значения
#t #f
одиночные символы
#\a #\b ..

Структуры данных

строки
"Hello, world!"
точечные пары
(2 . 3)
списки
(1 2 3 4 5 6)
вектора
#(1 2 3 4)

Комбинации

Общий вид
(процедура параметры)
Примеры
(+ 1 2 3) - сложение 3-х чисел
Комбинации могут вкладываться друг в друга
(+ (* 2 5) (- 3 4))

Процедуры для работы со точечными парами и списками

Процедура Пример Результат Замечание
1 Создание точечной пары (cons 1 2) (1 . 2) второй элемент пары - не список
2 Создание списка (list 1 2 3) (1 2 3)  
3 Создание списка '(1 2) (1 2) более краткая запись чем list
4 Доступ к первому элементу пары (списка) (car (cons 1 2)) 1  
5 Доступ ко второму элементу пары (cdr (cons 1 2)) 2  
6 Доступ к хвосту списка (cdr (list 1 2)) (2) cdr для списка возвращает список
7 Пуст ли список? (null? '()) #t  
8 Поиск элемента в списке (member 2 (list 1 2 3)) (2 3 4) возвращает список с найденного эл-та, иначе #f
9 Сортировка элементов списка (sort '(3 6 2) <) (2 3 6) второй параметр - критерий сортировки
10 Перестановка (инвертирование) списка (reverse '(2 3 4)) (4 3 2)  
11 Слияние списков (append '(1 2) '(3 4)) (1 2 3 4)  
12 Применение процедуры к списку (map (lambda (x) (+ x 1)) '(1 2)) (2 3) для каждого элемента списка вызывается процедура
         

Процедуры

Описание именованной процедуры:

; квадрат числа
(define (square x)
   (* x x))

; сумма квадратов числа
(define (sum-squares x y)
  (+ (square x) (square y)))

; вычисляем квадрат
>(square 5)
25
; вычисляем сумму квадратов
>(sum-square 3 4)
25

Описание безымянной процедуры и её использование (аппликация):

>((lambda (x) (+ x 1)) 4)
5

Безымянные процедуры можно возвращать из других процедур:

(define (inc)
  (lambda (x) (+ x 1)))

; применяем inc к параметру 5
>((inc) 5)
6

Если обычная функция вызывается как

(fun x)

То в случае возвращения безымянной функции

((fun) x)

Конструкция let

Специальная форма let позволяет создать локальное окружение

(let ((x 1) (y 2))
  (+ x y))

В данном окружении переменным x и y присваиваются числовые значения, а потом вычисляется выражение с +

Существует модификация let (let зо звёздочкой), которая позволяет использовать присвоенное значение в других присвоениях

(let* ((x 1) (y x))
  (+ x y))

Автор: Anton Shtanyuk

Created: 2019-07-19 Fri 20:41

Emacs 26.1 (Org mode 9.1.14)

Validate