Вход:  Пароль:  
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |
Это старая версия AltLinux/Sisyphus/Alterator/internals/2 за 2005-07-19 22:02:53..

AI-2


Stanislav Ievlev <inger@>
Продолжение.

2.2 Немного про alterator


На пару минут отвлечёмся от увлекательного мира Scheme и попробуем поприменять полученные знания в alterator – ведь именно он является основной темой повествования.


Как вы должно быть уже заметили в предыдущий раз, на схеме как думается, так и пишется. Попробуем например описать интерфейс. По-русски мы бы это сказали например так: «Кнопка 'Quit'".В alterator это выглядит:

Ещё вариант: «Горизонтальная группа из кнопки 'Yes' и кнопки 'No'". В alterator это:

Продолжаем: «Вертикальная группа из метки 'Hello, world!' и кнопки 'Quit'".


Вот видите, как всё просто! Мы уже умеем описывать интерфейсы, заодно познакомились с тем что в схеме бывают не только целые числа, но и строки.

2.3 Имена


Выражение: (* 10 50) хорошо, а: (* width height) лучше. (3.1415926 * 10.5 * 10.5) – интригующе, а (* pi radius radius) – всё же понятнее, (+ 2/3 5/7) – какие-то невзрачные действия с дробями, а (+ my-piece-of-cake your-piece-of-cake) – уже обретает смысл.


Хочется сделать выражения более осмысленные и читаемые. Сказано – сделано. Фраза «Опеределим b как 5", записывается (define b 5). Сразу несколько примеров:


Если при определении встречается какое-либо выражение, например сумма двух целых чисел из последнего примера, то это выражение вычисляется и переменная полагается равной уже его результату. Кстати a,b,c,str и width – действительно называются переменными. Вас это совершенно не должно смущать ибо с переменными вы сталкивались ещё в курсе школьной алгебры. Итак, записать (define w (+ 1 3)) совершенно равносильно тому что записать (define w 4). Либо вы подсчитаете в уме, либо за вас это сделает Scheme.


Ну уж коли мы вспомнили про школу, то теперь мы можем записать известные нам выражения.


Теперь вооружившись полученными знаниями мы можем записывать уже гораздо более сложные программы на Scheme, например такую:


Наверное вы заметили, что комментарии к коду я пишу начиная их с ;. Это не случайно, все комментарии в тексте программы начинаются с символа ;. Когда интерпретатор или компилятор читает наш код, весь текст начинающийся с ; и до конца строки он игнорирует.


Ещё одна программа:

2.4 Про истину


Если говорить кратко «всё есть истина кроме лжи», то есть

Вообще все другие типы, которые мы ещё не изучили – это истина. Все кроме лжи, которая имеет обозначение #f.


Сразу познакомимся с простейшими логическими операциями:
Результат (not 3) – это #f,
Результат not “test”) – это тоже #f.
Интересно, а какой должен быть результат (not #f) . Истин-то у нас много ;) На этот случай есть истина в первой инстанции, обозначаемая #t. Стало быть результат (not #f) – это #t.

2.5 Разделяй и влавствуй


Ещё для счастья нам не хватает объединять повторяющиеся фрагменты в функции, которые можно было бы потом вызывать.


Это очень важный и интересный момент в Схеме. Вы наверное часто замечали, что разделение многоэтапной операции на составляющие очень полезно. Например, создание нового процесса, можно разделить на два этапа. Клонирование – fork и замена содержимого клона на другой процесс – exec. Такое разделение позволяет не запускать например новый процесс, когда это не нужно (сразу exec) или не порождать новый процесс, если клон сам справится с задачей (сразу fork).


Вот так и с функциями. Создание функции, например f от одного аргумента, делится на собственно создание одноаргументной функции и на присваивании ей имени f.


Как присваивать имена, мы уже знаем – через define, а создание функции описывается следующей конструкцией


Если аргументов нет, то они просто не пишутся. Результат вычисления последней инструкции возвращается в качестве ответа.


Примеры:


Теперь совместим создание функции с присваиванием ей имени


Вызываются созданные функции точно также как мы это делали ранее: (имя аргументы)
Как я говорил уже, синтаксис в Схеме очень регулярный, нет лишних синтаксических конструкций, если они не требуются.


Ну вот, теперь мы можем ещё больше усовершенствовать наши программы:


Продолжение следует....


 
Файлов нет. [Показать файлы/форму]
Комментариев нет. [Показать комментарии/форму]