Элементы языка 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))