Введение в язык Scheme для школьников: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 233:
==Списки==
Проведём следующую работу:
<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>
 
==Работа со списками==