==Списки==
Проведём следующую работу:
<codesource lang=scheme>(define a 1)
(define b 2)
(define c 3)
(+ a 1)
(+ b 1)
(+ c 1)</codesource>
А как бы нам сразу взять три числа и увеличить их на единицу одним махом? Для этого надо «<связать»> эти числа вместе. Один из способов склеивания - список. Создаётся список следующей конструкцией:
< codesource lang=scheme>(list <элемент1> <элемент2> <элемент3> ...)</ codesource> ▼
способов склеивания — список. Создаётся список следующей конструкцией:
▲ <code>(list <элемент1> <элемент2> <элемент3> ...)</code>
Пример:
<codesource lang=scheme>(define abc (list 1 1 1)) ; список из трёх единиц
(define lst1 (list 1 2 3)) ; список из трёх разных чисел
(define lst2 (list "hello" "my" "world")) ; список из строк
(define lst3 (list "hello" 1 "world" 3)) ; список из строк и чисел
(define lst4 (list (+ 1 0) 2 3)) ; элементы списка можно вычислять перед его созданием</codesource>
Scheme также предоставляет функцию:
<codesource lang=scheme>(map <функция> <список>)</codesource>
Эта функция возвращает список, в котором каждый элемент есть результат применения функции "<функция>" к элементу исходного списка. Пример:
< codesource lang=scheme>(define (inc x) (+ x 1)); увеличивает число на единицу ▼
(map inc (list 1 1 1)); возвращает список из двоек ▼
списка. Пример:
(map square (list 1 2 3)); возвращает список из квадратов элементов, то есть 1, 4 и 9.</ codesource> ▼
▲ <code>(define (inc x) (+ x 1)); увеличивает число на единицу
▲ (map inc (list 1 1 1)); возвращает список из двоек
▲ (map square (list 1 2 3)); возвращает список из квадратов элементов, то есть 1, 4 и 9.</code>
Вспомним про lambda и решим задачу, которую поставили себе в начале этого раздела:
<codesource lang=scheme>(define abc (list 1 1 1))
(map (lambda(x) (+ x 1)) abc)</codesource>
А можно даже и список не вводить как дополнительную переменную:
<codesource lang=scheme>(map (lambda(x) (+ x 1))
(list 1 1 1))</codesource>
===Упражнение 3===
Пользуясь функциями write (для печати списка на экране) и map, напишите функцию, которая будет выводить на экран список, увеличенный на заданное число, например
< codesource lang=scheme>(print-it 5 (list 1 2 3)) ;выведет "(6 7 8)"</ codesource> ▼
экран список, увеличенный на заданное число, например
▲ <code>(print-it 5 (list 1 2 3)) выведет "(6 7 8)"</code>
==Работа со списками==
|