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

Содержимое удалено Содержимое добавлено
Строка 215:
 
==Принцип наименьших усилий==
Не надо делать лишних действий, если их можно избежать. Последний вариант функции repeat хорош, но ... зачем каждый раз давать функции имя, если нужно просто её выполнить? А можно ли вообще создать функцию, но не давать ей имя? Оказывается можно. В языке есть специальная инструкция, которая говорит «создать функцию».
<codesource lang=scheme>(lambda (<аргументы>) <тело функции> <последнее вычисленное значение возвращается>)</codesource>
 
давать функции имя, если нужно просто её выполнить? А можно ли вообще создать функцию, но не давать ей имя? Оказывается
 
можно. В языке есть специальная инструкция, которая говорит «создать функцию».
<code>(lambda (<аргументы>) <тело функции> <последнее вычисленное значение возвращается>)</code>
 
Пример:
<codesource lang=scheme>(lambda (x) (* x x)) ; создать функцию, которая вычисляет квадрат числа
(lambda (x y) (+ x y)) ;создать функцию, которая вычисляет сумму двух чисел
(define square (lambda(x) (* x x))) ; создать функцию, которая вычисляет квадрат числа и назвать её square.</codesource>
 
Оказывается, последняя конструкция то же самое, что и:
<codesource lang=scheme>(define (square x) (* x x))</codesource>
 
Вот мы с вами открыли ещё один способ определять функции с именами: сначала создаём, затем даём имя. Давайте-ка теперь
 
Вот мы с вами открыли ещё один способ определять функции с именами: сначала создаём, затем даём имя. Давайте-ка теперь «повторим» действия, не давая имена функциям:
<codesource lang=scheme>(repeat 3 (lambda() (display "hello")) ) ; три раза выведем на экран "hello"
(repeat 5 (lambda() (display "1"))) ; пять раз выведем на экран "1"</codesource>
Для repeat используются функции без параметров, поэтому в конструкции lambda пустая пара скобок.