Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37885727
en ru br
Репозитории ALT
5.1: 0.1-alt2
4.1: 0.1-alt2
4.0: 0.1-alt1.M40.1
www.altlinux.org/Changes

Группа :: Документация/Прочее
Пакет: docs-scheme_article1

 Главная   Изменения   Спек   Патчи   Исходники   Загрузить   Gear   Bugs and FR  Repocop 

pax_global_header00006660000000000000000000000064110011517130014500gustar00rootroot0000000000000052 comment=53b7b7cf29b3dc201910ca22236038062526e03c
docs-scheme_article1-0.1/000075500000000000000000000000001100115171300153145ustar00rootroot00000000000000docs-scheme_article1-0.1/.gear-rules000064400000000000000000000000531100115171300173610ustar00rootroot00000000000000tar: . name=docs-scheme_article1-@version@
docs-scheme_article1-0.1/License000064400000000000000000000004361100115171300166240ustar00rootroot00000000000000Данный документ распространяется на условиях свободной лицензии
FDL (Free Documentation License) версии 1.1 или любой более
поздней версии.

Данный документ не содержит текста, помещаемого на первой или последней
странице обложки. Данный документ не содержит неизменяемого текста.
docs-scheme_article1-0.1/doc/000075500000000000000000000000001100115171300160615ustar00rootroot00000000000000docs-scheme_article1-0.1/doc/index.html000064400000000000000000000251611100115171300200630ustar00rootroot00000000000000<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html; charset=KOI8-R" http-equiv="content-type">
<title>Знакомьтесь&nbsp;&mdash; язык Scheme</title>
</head>
<body style="color: rgb(0, 0, 0);" alink="#ee0000" link="#0000ee"
vlink="#551a8b">
<pre></pre>
<h1>Ваш новый язык&nbsp;&mdash; Scheme<br>
</h1>
<h2>Знакомство с грамматикой</h2>
<p>Вы хорошо знаете русский, возможно, неплохо уже говорите по-английски, в школе вас научили несколько необычному языку математики.</p>
<p>Предлагаю вам выучить ещё один&nbsp;&mdash; LISP. Точнее, один из его самых
интересных диалектов&nbsp;&mdash; Scheme (правильно произносится название как
&laquo;ским&raquo;, однако можно говорить и проще&nbsp;&mdash; &laquo;схема&raquo;)</p>
<pre><br></pre>
<p>Начнём с того, что ознакомимся с несколько необычным порядком слов
этого языка: &laquo;действие объект объект ...&raquo;. Хотя почему необычным?
Вот несколько фраз на русском языке, организованных по тому же принципу:</p>
<p>&laquo;Сумма трёх и пяти&raquo;</p>
<p>&laquo;Произведение пяти, шести и семи&raquo;</p>
<p>Каждая законченная фраза на этом языке должна быть окружена парой
круглых скобок.</p>
<p>Запишем сказанное выше на Scheme:</p>
<div style=&laquo;background-color: rgb(204, 204, 204);">(+ 3 5)</div>
<div style=&laquo;background-color: rgb(204, 204, 204);">(* 5 6 7)</div>
<p>Можно записать выражения и посложнее:</p>
<p style=&laquo;background-color: rgb(204, 204, 204);">(+ 2 3 (+ 5 6) ) -
&laquo;Сумма двух, трёх и суммы пяти и шести."</p>
<p>Просто, не правда ли?</p>
<p>Давайте двигаться дальше. Фраза "(* 3 5)"&nbsp;&mdash; хороша, а<span
style=&laquo;font-family: monospace;"> </span>"(* width height)" лучше.
Выражение "(* 2&nbsp; 3.1415926&nbsp;5)"&nbsp;&mdash; интригующе, а <br>
"(* 2&nbsp;pi&nbsp;radius)" гораздо более осмысленно. Здесь width,
height&nbsp;&mdash;
переменные, а 3,5&nbsp;&mdash; их текущее значение.</p>
<p>Переменная задаётся следующей конструкцией языка:</p>
<div style=&laquo;background-color: rgb(204, 204, 204);">(define имя
&laquo;первоначальное значение&raquo;)</div>
<p>Пример:</p>
<div style=&laquo;background-color: rgb(204, 204, 204);">(define width 3)</div>
<div style=&laquo;background-color: rgb(204, 204, 204);">(define height 7)</div>
<div style=&laquo;background-color: rgb(204, 204, 204);">(* 2 (+ width
height))</div>
<p>Прочитаем записанное по русски: &laquo;Положим ширина&nbsp;&mdash; это три, высота&nbsp;&mdash;
это 7, подсчитаем произведение двух и суммы ширины и высоты (например,
периметр прямоугольника)&raquo;. Результат такого вычисления в нашем случае будет 20.</p>
<p>Продолжим совершенствовать конструкции. Допустим, нам требуется
подсчитать сумму квадратов двух чисел. Это можно сделать например так:</p>
<div style=&laquo;background-color: rgb(204, 204, 204);">(define a 3)</div>
<div style=&laquo;background-color: rgb(204, 204, 204);">(define b 4)</div>
<div style=&laquo;background-color: rgb(204, 204, 204);">(+ (* a a) (* b b))</div>
<p>Не правда ли, что-то режет глаз? Cлишком громоздко&nbsp;&mdash; так мы никогда
не говорим. Если бы у нас был в языке глагол который, означал бы
&laquo;квадрат числа&raquo;, то последнее выражение звучало бы:</p>
<div style=&laquo;background-color: rgb(204, 204, 204);">(+ (square a)
(square b))</div>
<p>Согласитесь, что так гораздо лучше.</p>
<p>Есть задача&nbsp;&mdash; есть её решение. Мы можем объявить новое
слово-функцию, назвать её square. Функция будет принимать в качестве
параметра число и возвращать его квадрат. Делается это следующим
образом:</p>
<div style=&laquo;background-color: rgb(204, 204, 204);">(define (square x)
(* x x))</div>
<p>Общий формат:</p>
<div style=&laquo;background-color: rgb(204, 204, 204);">(define (название
параметр параметр...) тело функции)</div>
<p>Функция возвращает последнее вычисленное значение. Это означает, что
следующая функция square2:</p>
<div style=&laquo;background-color: rgb(204, 204, 204);">(define (square2 x)
(+ x x) (* x x))</div>
<p>вернёт тот же результат, что и square, только попутно сделает ещё
одно ненужное дело&nbsp;&mdash; удвоение числа.</p>
<p>Перепишем пример с суммой квадратов чисел заново:</p>
<div style=&laquo;background-color: rgb(204, 204, 204);">(define a 3)</div>
<div style=&laquo;background-color: rgb(204, 204, 204);">(define b 4)</div>
<div style=&laquo;background-color: rgb(204, 204, 204);">(define (square x)
(* x x))</div>
<div style=&laquo;background-color: rgb(204, 204, 204);">(+ (square a)
(square b))</div>
<p>Нам не хватало слов в языке&nbsp;&mdash; мы их
добавили. Вообще, когда вы пишете программу на LISP, вы описываете не
алгоритм, а сначала создаёте язык, а потом на нём формулируете исходную
задачу. Несколько точнее&nbsp;&mdash; вы &laquo;подгоняете&raquo; данный вам Scheme язык до
тех пор, пока он не станет совпадать с языком, на котором задача
формулируется легко.</p>
<p>Сразу пример. Пусть перед нами стоит задача сделать программу,
которая спрашивает имя пользователя, а потом выводит ему приветствие.</p>
<p>Scheme предоставляет нам несколько готовых &laquo;глаголов&raquo;:</p>
<ul>
<li>read&nbsp;&mdash; для чтения имени</li>
<li>display&nbsp;&mdash; для того чтобы рисовать что-то на экране</li>
<li>newline&nbsp;&mdash; для того чтобы рисовать на экране &laquo;перевод строки&raquo;</li>
</ul>
<p>Мы бы хотели иметь такие &laquo;глаголы&raquo;:</p>
<ul>
<li>hello&nbsp;&mdash; для приветствия с одним параметром&nbsp;&mdash; именем пользователя</li>
<li>username&nbsp;&mdash; для получения имени пользователя, без параметров.</li>
</ul>
<p>На таком языке наша задача выглядела бы следующим образом:</p>
<div style=&laquo;background-color: rgb(204, 204, 204);">(hello (username))</div>
<p>Дело за малым&nbsp;&mdash; определить hello и username. Нет проблем. Вот полный
текст программы.</p>
<div style=&laquo;background-color: rgb(204, 204, 204);">(define (hello name)</div>
<div style=&laquo;background-color: rgb(204, 204, 204);">&nbsp; (display
&laquo;Hello ")</div>
<div style=&laquo;background-color: rgb(204, 204, 204);">&nbsp;&nbsp;(display
name)</div>
<div style=&laquo;background-color: rgb(204, 204, 204);">&nbsp; (display "!")</div>
<div style=&laquo;background-color: rgb(204, 204, 204);">&nbsp; (newline))</div>
<div style=&laquo;background-color: rgb(204, 204, 204);">(define (username)</div>
<div style=&laquo;background-color: rgb(204, 204, 204);">&nbsp; (write &laquo;Enter
your name:")</div>
<div style=&laquo;background-color: rgb(204, 204, 204);">&nbsp; (read))</div>
<div style=&laquo;background-color: rgb(204, 204, 204);"></div>
<div style=&laquo;background-color: rgb(204, 204, 204);">(hello (username))</div>
<p>LISP&nbsp;&mdash; полноценный функциональный язык, а поэтому функции&nbsp;&mdash;
полноправные члены этого языка, независимо от того, определили вы их сами, или они уже были в языке &laquo;готовые&raquo;. В частности, их можно передавать в
качестве параметров в другие функции, а там уже делать с ними всё, что
потребуется.</p>
<pre></pre>
<p>Например, функцию &laquo;модуль числа&raquo;, можно определить так:</p>
<div style=&laquo;background-color: rgb(204, 204, 204);">(define (abs x)</div>
<div style=&laquo;background-color: rgb(204, 204, 204);">&nbsp; (if
(positive? x&nbsp;)</div>
<div style=&laquo;background-color: rgb(204, 204, 204);">&nbsp; &nbsp;&nbsp;
&nbsp; x</div>
<div style=&laquo;background-color: rgb(204, 204, 204);">&nbsp; &nbsp; &nbsp;
(- x)))</div>
<p>&laquo;Если аргумент положителен&nbsp;&mdash; возвращается x, иначе минус x&raquo;. А можно
и так:</p>
<div style=&laquo;background-color: rgb(204, 204, 204);">(define (abs x)</div>
<div style=&laquo;background-color: rgb(204, 204, 204);">&nbsp; ((if
(positive? x) + -) x))</div>
<pre></pre>
<p>&laquo;Если аргумент положителен, то плюс, иначе минус x&raquo;. Здесь в
результате исполнения выражения if возвращается функция + или -,
которая затем применяется к аргументу x. Кстати, обратите внимание на
новую конструкцию if&nbsp;&mdash; полагаю, что её назначение вам сразу ясно.
Сначала проверяется первый аргумент, если он истинен, то исполняется
второй аргумент, иначе третий. Общий формат следующий:</p>
<div style=&laquo;background-color: rgb(204, 204, 204);">(if условие
&laquo;действие, если условие выполняется&raquo; &laquo;действие в противном случае&raquo;)</div>
<p></p>
<pre><br></pre>
<h2>Где посмотреть и попробовать</h2>
<pre><br></pre>
<p>В теории всё хорошо, а где немного попрактиковаться? В мире можно
найти много прекрасно разработанных сред для работы со Scheme. &nbsp;К
сожалению, большинство документации по Scheme на английском языке, но
можно найти и отличные введения на русском&nbsp;&mdash; язык-то простой.</p>
<p>Вот названия нескольких самых распространённых реализаций:</p>
<p><span style=&laquo;font-weight: bold;">Plt Scheme</span>(http://www.plt-scheme.org/)&nbsp;&mdash; одна из самых полных реализаций, включает в себя удобную обучающую
среду Dr.Scheme. Есть версии для платформ Windows,Linux, Mac OS.&nbsp;</p>
<p><span style=&laquo;font-weight: bold;">Bigloo </span>(http://www-sop.inria.fr/mimosa/fp/Bigloo/)&nbsp;&mdash; тоже достаточно полная реализация. Доступна для платформ Windows,
Linux.<span style=&laquo;font-family: monospace;"></span></p>
<p><span style=&laquo;font-weight: bold;">LispMe</span>
(http://www.lispme.de/index.html)&nbsp;&mdash; версия для карманных компьютеров с
операционной системой Palm OS.</p>
<p>Также ещё посмотрите <span style=&laquo;font-weight: bold;">Gambit-C</span>
(http://www.iro.umontreal.ca/~gambit/)&nbsp;&mdash; один из самых быстрых
компиляторов Scheme.&nbsp;</p>
<p>Все перечисленные реализации Scheme&nbsp;&mdash; \то интерпретаторы. Запускате интерпретатор&nbsp;&mdash; и можно вести с ним диалог на Scheme: в ответ на его приглашение вводите конструкции на Scheme, а он будет возвращать результаты вычислений.</p>
<div style=&laquo;background-color: rgb(204, 204, 204);">Wecome to MzScheme
version 208, Copyright (c) 2004 &nbsp;PLT Scheme, Inc.<br>
&gt;1</div>
<div style=&laquo;background-color: rgb(204, 204, 204);">1</div>
<div style=&laquo;background-color: rgb(204, 204, 204);">&gt;(+ 1 2)</div>
<div style=&laquo;background-color: rgb(204, 204, 204);">3</div>
<div style=&laquo;background-color: rgb(204, 204, 204);">&gt;(define a 3)</div>
<div style=&laquo;background-color: rgb(204, 204, 204);">&gt;(+ a a)</div>
<div style=&laquo;background-color: rgb(204, 204, 204);">6<br>
&gt;</div>
<p>Попробуйте &laquo;проиграть&raquo; все вышеперечисленные примеры. Думаю, вам
понравится!</p>
<h2>Кто в мешке</h2>
<p>Простота Scheme обманчива. На самом деле&nbsp;&mdash; это один из самых мощных на
сегодняшний день языков программирования. На основе этого языка можно
изучить все известные стили и методы
программирования. С частью этих приёмов мы познакомимся с вами в
следующих статьях этой серии.</p>
<pre></pre>
</body>
</html>
docs-scheme_article1-0.1/docinfo000064400000000000000000000006201100115171300166560ustar00rootroot00000000000000Updated: no
Supported: yes
Language: ru
License: FDL
Format: html
Url: http://heap.altlinux.ru/kirill/scheme_article_1/
Abstract: Вводная статья про язык scheme, ориентированная на школьников (старшеклассников).
Author: Станислав Иевлев
Version: 0.1
Title: Знакомьтесь -- язык Scheme
Section: Научно-популярный
Section: Декларация
Section: Персональное
Section: Программы
Section: Многоплатформенный
docs-scheme_article1-0.1/docs-scheme_article1.spec000064400000000000000000000024151100115171300221500ustar00rootroot00000000000000# Generated File.
%setup_docs_module scheme_article1 ru

Name: %packagename
Version: 0.1
Release: alt2

Summary: Scheme -- your new language
Summary(ru_RU.KOI8-R): Знакомьтесь -- язык Scheme
License: %fdl
Url: http://heap.altlinux.ru/kirill/scheme_article_1/
Buildarch: noarch
Requires: docs-utils
BuildRequires(pre): rpm-build-docs-experimental >= 0.3
BuildRequires(pre): rpm-build-licenses >= 0.6

# replace docs-scheme_article_1-kirill
Provides: docs-scheme_article_1-kirill
Obsoletes: docs-scheme_article_1-kirill

Source: %name-%version.tar

%description
Introductary article into Scheme programming language.

%description -l ru_RU.KOI8-R
Вводная статья про язык scheme, ориентированная на школьников (старшеклассников).

%prep
%setup

%build
%docs_module_build "html" "index.html"

%install
%docs_module_install

%post
%docs_module_postin

%postun
%docs_module_postun

%files
%docs_module_files

%changelog
* Tue Apr 15 2008 Artem Zolochevskiy <azol@altlinux.ru> 0.1-alt2
- replaces docs-scheme_article_1-kirill
+ added Provides/Obsoletes

* Tue Apr 15 2008 Artem Zolochevskiy <azol@altlinux.ru> 0.1-alt1
- initial build for Sisyphus
+ based on docs-scheme_article_1-kirill package

* Fri Apr 07 2006 Kirill Maslinsky <kirill@altlinux.ru> 060407-alt1
- Initial build for Sisyphus.

 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin