Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Операционные системы > Софт
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.09.2015, 22:31   #11
Avatar-Z
Пользователь
 
Аватар для Avatar-Z
 
Регистрация: 03.09.2015
Сообщений: 63
По умолчанию

Итак, уже известно, каким образом аргумент, имеющий значение "Test" передаётся в параметр title. Теперь подробнее разберём принцип работы основного кода, отвечающего за вывод в окно заданной фразы, в данном случае "Hello, Mir!", а также закрывающий это окно (вместе с виртуальной машиной) при нажатии на кнопку Ok.

Первым делом, посмотрим какие вообще функции принимают участие в нашей программе (если кто не знает/не помнит,функция - это часть кода, подпрограмма, которая может вызываться из другого места программы ):
1. end (созданная нами функция)
2. main (главная функция, с которой начинается работа программы)
3. _DLGrflmessage (библиотечная функция, поставляемая вместе с языком SCOL)
4. _DLGMessageBox (тоже библиотечная функция)
5. _channel (ещё одна функция из библиотеки)
6. _closemachine (снова из библиотеки)

Вот благодаря этим шести функциям наша программа и работает именно описанным выше образом.
А теперь пробуем разобраться, что делает та или иная функция. С функцией main всё понятно - она содержит код, с которого начинается выполнение программы. И в данном случае этот код состоит всего лишь из одного оператора, оканчивающегося вызовом созданной нами функции end, в свою очередь, вызывающую библиотечную функцию _closemachine. Благодаря _closemachine программа в итоге закрывается вместе с виртуальной машиной SCOL. Но вот способ закрытия программы (в нашем случае при нажатии на кнопку Ok) задаётся в другой части единственного оператора функции main.

Больше о _closemachine говорить не имеет смысла, так как мы теперь знаем, для чего она нужна. И этого достаточно. В оригинальной документации API её описание находится здесь http://www.scolring.org/files/doc_ht...semachine.html а в переводимом на русский язык варианте путь будет такой: Основные функции > Виртуальная машина > _closemachine

Осталось разобрать ещё три библиотечные функции, и некоторые команды. Но перед этим дам ссылки на описание этих функций. И в следующих главах, прежде, чем будет дано объяснение какому-либо коду, сначала выпишу в отдельный список все функции, а для библиотечных будут даны ещё и ссылки на их расположение в документации API.

_DLGrflmessage http://www.scolring.org/files/doc_ht...flmessage.html [2D > 2D (система) > Диалоговое окно > _DLGrflmessage]
_DLGMessageBox http://www.scolring.org/files/doc_ht...essagebox.html [2D > 2D (система) > Диалоговое окно > _DLGMessageBox]
_channel http://www.scolring.org/files/doc_html/_channel.html [Основные функции > Управление каналами > _channel]
Avatar-Z вне форума Ответить с цитированием
Старый 09.09.2015, 08:56   #12
Avatar-Z
Пользователь
 
Аватар для Avatar-Z
 
Регистрация: 03.09.2015
Сообщений: 63
По умолчанию

Ещё раз приведу код всей программы:

Код:
/* Hello_Mir.pkg */

fun end(a,b,r)=
_closemachine;;

fun main(title)=
_DLGrflmessage(_DLGMessageBox _channel nil title "Hello Mir!" 0)@end 0;;
Полностью, всё до мелочей, разбирать не будем, так как пока главное понять суть, а не углубляться в детали. Тем более в оригинальном учебнике описание этого кода ещё более краткое, чем здесь.
Как уже выяснили, самое главное происходит внутри функции main. Первая функция, встречающаяся в единственном операторе - _DLGrflmessage. Эта функция здесь используется для того, чтобы определять - в ответ на какие действия пользователя закроется диалоговое окно. В данном случае, это происходит при нажатии на кнопку Ок.

Как это реализуется? Очень просто - всё, что находится после имени функции _DLGrflmessage, является её аргументами, включая функцию _DLGMessageBox, предназначенную для создания самого диалогового окна. Чтобы понять, какие вообще аргументы может принять _DLGrflmessage, смотрим в документации, какие входные параметры эта функция имеет:
1. _messagebox_ (в этот параметр функция принимает в качестве аргумента другую функцию - создающую само диалоговое окно)
2. _callback_ (не вдаваясь в лишние подробности - в этот параметр в качестве аргумента в данном случае передаётся функция end, отвечающая за закрытие виртуальной машины)
3. _user_ (пользовательский параметр)

Все тонкости приведённых параметров данной функции, да и всего кода, станут более понятными в дальнейшем. Сейчас лишь снова окинем взглядом оператор, содержащийся в функции main. Известно, что всё, что идёт за именем функции _DLGrflmessage является её аргументами. Но ведь параметра всего три, почему же так много аргументов в коде? Дело в том, что там записаны не только аргументы самой функции _DLGrflmessage, но и аргументы, так сказать, нижележащего уровня.

Вспомним, что аргументы функций в языке SCOL можно записывать не в скобках, как в Си-подобных языках, и не через запятые, а через пробелы. Поэтому такой код тоже будет корректным:

Код:
_DLGrflmessage _DLGMessageBox _channel nil title "Hello Mir!" 0 @end 0;;
Заметили? В приведённой выше строке исчезли скобки, а вот ещё раз привожу оригинал:

Код:
_DLGrflmessage(_DLGMessageBox _channel nil title "Hello Mir!" 0)@end 0;;
В данном случае скобки использованы лишь для удобства чтения кода, они показывают, какие аргументы имеет функция _DLGMessageBox. Этих аргументов пять, как и входных параметров данной функций:

1. _channel_ (В качестве аргумента в нашем случае используется функция _channel, связанная с важным в языке SCOL понятием "каналы". Про каналы поговорим в следующих главах)
2. _window_ (Параметр связан с иерархией окон, и в данном коде имеет аргумент nil [ноль], означающий, что в нашей программе больше никаких окон нет и не будет)
3. _title_ (В качестве аргумента принимает название окна ["Test"], переданное в параметр title функции main из файла сценария с расширением .scol)
4. _text_ (Собственно сам текст, в нашем случае "Hello Mir!", ради которого и создана эта программа)
5. _flag_ (Цифра, отвечающая за то, сколько кнопок и с какими названиями будут отображаться в диалоговом окне. 0 - кнопка "ОК", 1 - кнопки "ОК" и "Отмена", 2 - кнопки "Да" и "Нет". Текст на кнопках отображается на том языке, на котором локализована операционная система)

Ещё можно заметить, что имя функции end, которое присутствует в качестве аргумента во втором параметре функции _DLGrflmessage, имеет перед собой символ @. Сделано это для того, чтобы не допустить одновременный вызов функций создания диалогового окна и закрытия виртуальной машины, что приведёт к ошибке компиляции.

Также обратите внимание, что в главной функции main для входного параметра title не указан тип. Компилятор сам определил, что этот параметр имеет тип "Строка".

На этом описание работы второй версии программы, выводящей на экран сообщение Hello Mir!, окончено. Объяснены не все тонкости работы кода, остальное станет понятным из других глав учебника.
Avatar-Z вне форума Ответить с цитированием
Старый 21.11.2015, 01:28   #13
Avatar-Z
Пользователь
 
Аватар для Avatar-Z
 
Регистрация: 03.09.2015
Сообщений: 63
По умолчанию

Перевод непосредственно книги "SCOL Tutorial Language" продолжу чуть позже, а перед этим несколько постов посвящу дополнительной информации о языке, не представленной в книге.

Итак.

Некоторое время назад я задал вопросы по языку SCOL на официальном форуме проекта. Первыми ответили два главных разработчика из Франции - arkeon (Бастин Бурино) и iri (Стефан Бисаро).
Тема находится здесь http://www.scolring.org/forum/viewtopic.php?id=1406

Вкратце суть такая:
Вопрос 1. Почему технология SCOL почти неизвестна в мире?
Ответ 1.
Цитата:
Сообщение от arkeon
Это старая технология, она была хорошо известна в 2000 году, теперь же о ней мало кто знает. Когда открыли коды этой технологии, наша небольшая команда стала работать над её развитием.
___________________________________ _
Вопрос 2. Почему выбран именно SCOL? (для OpenSpace3D)
Ответ 2.
Цитата:
Сообщение от arkeon
Когда началась работа над OpenSpace3D, в нашей команде было несколько человек, внёсших вклад в SCOL, так что это был для нас хороший выбор, позволяющий сделать движок лучше и быстрее.
Также SCOL поддерживает компиляцию кода "на лету", что делает процесс более гибким (загрузка/выгрузка PlugIT'ов)
___________________________________ _
Вопрос 3. Какие недостатки у SCOL?
Ответ 3.
Цитата:
Сообщение от arkeon
Мне трудно ответить на этот вопрос^^
Пока нет полной портируемости (IOS порт в разработке), также есть необходимость в переносе на OSX/Linux и другие платформы.
Технологии развиваются слишком быстро, и для нашей маленькой команды трудно обновлять всё до актуального состояния.
___________________________________ _
Вопрос 4. SCOL - интерпретируемый язык. Для тяжёлых 3D-сцен он не медленный?
Ответы 4.
Цитата:
Сообщение от arkeon
3D-сцены не зависят от того, что язык интерпретируемый, так как код сцены загружается уже скомпилированным.
Но для очень большой сцены нужен более специфический менеджер сцены 3D движка. (Возможно однажды) (maybe one day)
Цитата:
Сообщение от iri
Загрузка 3D-сцены может зависеть от качества программы, но это не вопрос интерпретируемого или компилируемого языка.
С другой стороны программа (тот же код), написанная на интерпретируемом языке, может загружаться и компилироваться на всех поддерживаемых платформах.
___________________________________ _
Вопрос 4.1. Функции (API) SO3Engine замедляют работу 3D-сцен (про сравнению с "чистым" Ogre3D)? Или нет?
Ответ 4.1.
Цитата:
Сообщение от arkeon
Функции SCOL имеют высокий уровень привязки к Ogre3D, поэтому я не думаю, что есть большая разница.
___________________________________ _

Последний раз редактировалось Avatar-Z; 21.11.2015 в 01:38.
Avatar-Z вне форума Ответить с цитированием
Старый 21.11.2015, 01:28   #14
Avatar-Z
Пользователь
 
Аватар для Avatar-Z
 
Регистрация: 03.09.2015
Сообщений: 63
По умолчанию

Вопрос 5. У SCOL много общего с OCaml?
Ответы 5.
Цитата:
Сообщение от arkeon
Несколько моих стажёров сказали, что SCOL выглядит как OCaml, но я не знал этого языка раньше, поэтому не могу ничего сказать.
Цитата:
Сообщение от iri
На самом деле, SCOL имеет много общего с OCaml. Sylvain Huet, создавший основы языка SCOL в 1996-97 годах - работал с OCaml. Поэтому он сознательно включил в SCOL много понятий и структур из OCaml.
Цитата:
Сообщение от iri
OCaml или, может быть Caml, но я думаю OCaml. Это сейчас устарело

Ниже описаны несколько основных (общих) концепций и конструкций в SCOL и (O)Caml (а также в некоторых новых языках):

- Функциональный язык;
- Соответствие шаблонов;
- Определение типа (автоматическое определение типа выражения);
- Определение типа (внутренний алгоритм для определения типа объекта во время создания байт-кода, основан на том же принципе, что и OCaml);
- Сильная и статическая типизация;
- Обобщённое программирование и полиморфизм;
- Рекурсия;
- Позволяет использовать императивное программирование;
- Сборщик мусора;
- Сборщик мусора (внутренний алгоритм основан на тех же принципах, что и в OCaml, но в SCOL добавлены некоторые свои особенности);
- Некоторые ключевые слова взяты (или адаптированы) из OCaml: let, mutate, match и match syntaxe (| ...), fun, и т.д. А также двойная точка с запятой ;;

Другие (ключевые слова и символы) взяты из C/C++, такие как блоки комментариев (/ * * / //), обозначение структур (struct), точка с запятой в конце инструкции, и так далее.
___________________________________ _
Вопрос 6. Какие программы написаны на SCOL? (кроме OpenSpace3D, SCS, http://www.arkeon.be/skin1/products....e=projets_scol)
Ответ 6.
Цитата:
Сообщение от arkeon
Существует много приложений, написанных на SCOL, но не все они находятся в открытом доступе. OpenSpace3D забирает у меня много времени, поэтому я не разрабатываю много приложений. Но когда нужно выиграть время, я пишу на SCOL (потому, что я пишу на SCOL каждый день, и там уже есть много функциональных возможностей, не все из которых применены в OpenSpace3D)
___________________________________ _
Вопрос 7. SCOL Server больше не развивается? SCOL Server 4 - последняя версия?
Ответы 7.
Цитата:
Сообщение от arkeon
SCOL Server в основном предназначен для применения в SCS.
OpenSpace3D использует более гибкий и лёгкий Java-сервер для многопользовательской коммуникации. Это позволяет развернуть его на любом типе сервера, и является более лёгким в обслуживании.
Цитата:
Сообщение от iri
SCOL Server позволяет хостить многопользовательские приложения DMS (в основном), и не-DMS [возможно не совсем правильно перевёл]. Его разработка на данный момент прекращена, но может возобновиться в будущем. Зависит от потребностей в этом
___________________________________ _
Ещё был вопрос: Скажите пожалуйста, есть книги новее этой? http://redmine.scolring.org/projects...alLanguage.pdf
Ответ.
Цитата:
Сообщение от arkeon
Новых книг, посвящённых языку нет, но эта хорошо подойдёт в качестве основы (кроме устаревшей части про DMS)
___________________________________ _
___________________________________ _

Со временем, если получится перевести книги по SCOL и OpenSpace3D, возможно смогу задать разработчикам и более детальные вопросы по технологии.

Последний раз редактировалось Avatar-Z; 21.11.2015 в 01:36.
Avatar-Z вне форума Ответить с цитированием
Старый 21.11.2015, 19:48   #15
Avatar-Z
Пользователь
 
Аватар для Avatar-Z
 
Регистрация: 03.09.2015
Сообщений: 63
По умолчанию

Материал из вики-учебника


Данный материал не входит в текст основной книги, он является лишь очень кратким описанием языка SCOL. Выкладываемый перевод ещё более краткий.
Ссылка на оригинал вики-учебника по SCOL http://redmine.scolring.org/projects...iki/Scol_usage
___________________________________ _______

В SCOL всё является функцией (так как это функциональный язык).
Функции всегда должны возвращать результат. Результат должен иметь тот же тип. Любой код, находящийся за пределами какой-либо функции, будет приводить к фатальной ошибке.
Существуют несколько примитивных типов:

I (аналог int в языке C). Целочисленный тип.
F (аналог float в языке C). Тип чисел с плавающей точкой.
S (аналог string в языке C). Строковый тип.
Также некоторые другие типы (Env, Chn, Srv и Comm).

Но разумеется, можно создать любой другой тип, который нам необходим.

Переменные в SCOL также являются функциями, и могут быть либо глобальными, либо локальными. Локальная переменная видна (известна) только для следующей инструкции. Такая инструкция может быть одиночной, или находиться в блоке инструкций (команд). Область видимости глобальной переменной распространяется на весь последующий (после объявления этой переменной) код.

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

Будьте осторожны - исходный код, написанный на SCOL не читается таким же образом, как в процедурных языках программирования.

SCOL чувствителен к регистру во всех случаях.

Как написать функцию?

Функции всегда записываются так:

Код:
fun <имя_функции> (список_аргументов) =
    // инструкции
;;
fun - это зарезервированное ключевое слово.
Имя функции должно состоять только из следующих символов ASCII, без пробелов:
a-z, A-Z, 0-9
То есть из строчных и прописных латинских букв, а также из цифр.

Параметры должны разделяться запятой. Пример:

Код:
fun myFunction (name, nickname)=
    instructions;
    ;;
Определение всех функций завершается двойной точкой с запятой. Каждая инструкция (одиночная или блок инструкций) оканчивается одинарной точкой с запятой. Последняя инструкция (команда), находящаяся в теле функции оканчивается двойной точкой с запятой.

Код:
fun myOtherFunction (integer, string)=
    single_instruction_1;
    (    // начало блока
        single_instruction_2;
        single_instruction_3;
        single_instruction_4;
    );    // конец блока
    single_instruction_5
    ;;
Avatar-Z вне форума Ответить с цитированием
Старый 21.11.2015, 20:01   #16
Avatar-Z
Пользователь
 
Аватар для Avatar-Z
 
Регистрация: 03.09.2015
Сообщений: 63
По умолчанию

Как вызвать функцию?

Чтобы вызвать нужную функцию из другой функции, напишите её имя, а также аргументы.

[обратите внимание, что аргументы можно писать без скобок и разделять их пробелами, а параметры - в скобках с разделением через запятую].

Код:
fun myFunction (name, nickname)=
    instructions;
    ;;

fun myOtherFunction ()=
    myFunction "William" "Bill";
    instructions
    ;;
Будьте осторожны, аргументы должны иметь "правильный" тип. Об этом будет рассказано позже.

Как объявить переменную?

Глобальная переменная может быть объявлена двумя способами.

1. С заданием типа:

Код:
typeof myVariable = S;;
typeof myOtherVariable = I;;
2. С заданием начального значения:

Код:
var myVariable = "Bob";;
var myOtherVariable = 10;;
typeof и var - это два зарезервированных ключевых слова. Объявление переменной всегда завершается двойной точкой с запятой.
В первом случае, переменная myVariable равна нулю. Ноль - это конкретное значение, в данном случае являющееся аналогом NULL в языке C.
Во втором случае, myVariable имеет тип S (строковый тип), так как его начальное значение является строкой.
В дальнейшем эти значения и типы вы не можете менять.

Глобальная переменная всегда объявляется вне функции:

Код:
typeof myVariable = S;;
var myOtherVariable = 10;;

fun myFunction (name, nickname)=
    instructions;
    ;;
Локальная переменная наоборот - объявляется только внутри какой-либо функции, и не известна до выполнения следующей (после объявления этой переменной) инструкции.
let <начальное_значение> -> <переменная> in

Код:
fun myFunction (address)=
    let "Bob" -> myVariable in
    (
        let 10 -> myOtherVariable in
        instruction_1;
        instruction_2;
    );
    instruction_3
    ;;
В приведённом выше примере myVariable видна (известна) во всём блоке, где находятся команды instruction_1 и instruction_2.
Переменная myOtherVariable видна только в instruction_1.
В третьей инструкции (instruction_3) ни myVariable, ни myOtherVariable не могут быть использованы.

Примечания:
1. Вы можете объявлять переменные с нулевым значением (nil), но компилятор должен недвусмысленно определить тип переменных. Как это происходит - увидим позже.
2. Имя переменной должно состоять только из следующих символов ASCII: A-Z, a-z, 0-9.
Avatar-Z вне форума Ответить с цитированием
Старый 21.11.2015, 20:05   #17
Avatar-Z
Пользователь
 
Аватар для Avatar-Z
 
Регистрация: 03.09.2015
Сообщений: 63
По умолчанию

Как устанавливать новые значения переменных?

Хотя напрямую изменить изначально присвоенное переменной значение нельзя - при необходимости установить новое значение можно через параметры функции. Делается это с помощью команды set.

Код:
typeof myVariable = S;;
var myOtherVariable = 10;;

fun myFunction (name, age)=
    set myVariable = name;
    set myOtherVariable = age
    ;;

fun myFunction (name)=
    let "Bob" -> myVariable in
    (
        instruction_1;
        set myVariable = name;
        instruction_2;
    );
    instruction_3
    ;;
Как комментировать исходный код?

Как и в C++, можно использовать как однострочные, так и многострочные комментарии.
Чтобы добавить однострочный комментарий, используйте двойной слэш //
Для добавления многострочного комментария нужно использовать конструкцию /* комментарий */
Avatar-Z вне форума Ответить с цитированием
Старый 27.11.2015, 15:21   #18
Avatar-Z
Пользователь
 
Аватар для Avatar-Z
 
Регистрация: 03.09.2015
Сообщений: 63
По умолчанию

Как написать программу Hello World ?

Для этого существует много способов. Представленный ниже способ отнюдь не самый простой.
Откройте ваш любимый текстовый редактор и напишите следующие строки:

Код:
var myString = "World";;

fun printHello (string)=
    _fooS strcat "Hello " string
    ;;

fun print ()=
    printHello myString;
    set myString = "Bob";
    printHello myString;
    let "Alice" -> anyString in
    printHello anyString;
    0;;

fun main ()=
    _showconsole;
    print;
    printHello "Scol Community !";
    0;;
Теперь подробно разберём весь этот код.

1. Вначале объявляем глобальную переменную myString, и присваиваем ей начальное значение "World"

2. Пишем функцию printHello.
Эта функция выводит сообщение в консоль. Она принимает один аргумент. Обратите внимание, что тип аргумента никогда не определяется явно, так как функция может быть полиморфной. Компилятор будет неявно определять тип, исходя из контекста.
Аргументы доступны во всём теле функции (от символа "=" до двойной точки с запятой).
strcat является SCOL-функцией, которая предназначена для объединения двух строк.
Два аргумента функции strcat должны иметь тип S, поэтому компилятор считает, что результирующая строка тоже имеет тип S.
Возвращаемое значение данной функции - это возвращаемое значение её последней инструкции. _fooS возвращает строку (S), поэтому функция также возвращает значение типа S.

3. Следующая функция - print. Она выводит несколько сообщений в консоль (а также в лог-файл). Аргументы не требуются.
В первой инструкции вызывается записанная ранее функция printHello. В качестве аргумента в параметр string передаётся глобальная переменная myString, в которой находится значение строкового типа - слово "World".
Во второй инструкции в глобальную переменную myString устанавливается новое значение того же типа - "Bob".
Третья инструкция снова вызывает функцию printHello с аргументом myString. Не забывайте, что теперь значение переменной myString изменилось. Ещё раз хочу напомнить, что SCOL - язык с преобладающей парадигмой функционального программирования, поэтому напрямую менять значения переменных нельзя. Изменить значения можно через параметры функций с помощью команды set.
В четвёртой инструкции определяем локальную переменную anyString с начальным значением строкового типа - "Alice". Как было сказано ранее - локальные переменные объявляются только внутри каких-либо функций. В данном случае anyString объявляется внутри функции print, и о ней ничего не известно вплоть до пятой инструкции.
Наконец, в пятой инструкции снова вызывается функция printHello, но в её параметр string в качестве аргумента уже передаётся новая переменная - anyString.
В конце тела функции print, в качестве её возвращаемого значения записываем 0 (целочисленный тип). Обчно всегда возвращается ноль, если значение больше не используется.
Результатом работы функции print станет вывод в консоль следующих строк:
Hello World
Hello Bob
Hello Alice

4. Функция main является главной функцией. В отличие от некоторых других языков программирования - её имя может быть любым. Главная функция может принимать любое число аргументов, или не принимать ни одного. При необходимости мы можем определять несколько главных функций.
Главной функцией является функция, вызываемая из сценария запуска (файл с расширением .scol).

В нашем случае первая инструкция функции main предназначена для отображения консоли.
Вторая - вызов функции print.
Третья - вызов функции printHello, где в качестве аргумента указывается не переменная, а конкретное значение. В итоге появится фраза "Hello Scol Community !"
Ну и наконец, main возвращает целочисленное значение 0. Возвращаемое значение не влияет на [the following the application (следующие приложения ??)]
Avatar-Z вне форума Ответить с цитированием
Старый 27.11.2015, 18:11   #19
Avatar-Z
Пользователь
 
Аватар для Avatar-Z
 
Регистрация: 03.09.2015
Сообщений: 63
По умолчанию

Операторы языка SCOL

Для целых чисел:

Плюс : + : 1+2 5 + 20
Минус : - : 1 - 2 20 - 5
Умножить : * : 1*2 20 * 5
Делить : / : 1/2 20 / 5
По модулю: mod : mod 1 2 mod 20 5
___________________________________ _

Для чисел с плавающей точкой:

Плюс : +. : 1.0 +.2.2 5.1 +. 20.0
Минус : -. : 1.0 -. 2.2 20.0 -. 5.1
Умножить : *. : 1.0*.2.2 20.0 *. 5.1
Делить : /. : 1.0/.2.2 20.0 /. 5.1
По модулю : mod. :
___________________________________ _

Для строк:

Конкатенация : strcat : strcat "Bob" "Alice" => "BobAlice"
Конкатенация : strncat : strncat "Bob" :: " and " :: "Alice" :: nil => "Bob and Alice"
Субстрока : substr aString position length : substr "Bob and Alice are married" 8 5 => "Alice"
___________________________________ _

Логические операции:

И : && : (x > 5) && (x < 10)
ИЛИ : || : (x < 5) || (x > 10)
НЕ : ! : !1 (=> 0)
___________________________________ _

Побитовые операции: (также, как и в языке C)

and : & : 5 & 3 5 & 2
or : | : 5 | 3 5 | 2
Сдвиг:
>> : 5 >> 1
<< : 5 << 1
___________________________________ _

Операции сравнения:

> : 5 > 2 true
>= : 5 >= 5 true
< : 5 < 2 false
<= : 5 <= 2 false
== : 5 == 5 true
___________________________________ _

Другие операции:

[different (Разные ??)] != : 5 != 2 true
Сравнение двух строк (также, как и в языке C) : strcmp stringA stringB :
-- возвращает 1, если строки отличаются и код первого отличающегося символа в строке stringA больше кода символа на той же позиции в строке stringB. [перепроверить]
-- возвращает -1, если строки отличаются и код первого отличающегося символа в строке stringA меньше кода символа на той же позиции в строке stringB. [перепроверить]
-- возвращает 0, если строки равны
-- также, если строки разной длины, то возвращается положительное число, если строка stringA длиннее строки stringB, или отрицательное число, если строка stringB длиннее строки stringA. [перепроверить]
___________________________________ _

Приоритеты операций:

Такие же, как и в языке C.
Avatar-Z вне форума Ответить с цитированием
Старый 27.11.2015, 22:28   #20
Avatar-Z
Пользователь
 
Аватар для Avatar-Z
 
Регистрация: 03.09.2015
Сообщений: 63
По умолчанию

Типы в языке SCOL

Наиболее часто используемыми в SCOL типами являются:

I : integer (целое число)
S : string (строка)
F : float (число с плавающей точкой)
Chn : SCOL-канал
Srv : SCOL-сервер
Env : SCOL-окружение
Comm : связи [коммуникации, соединения] (как правило, между виртуальными машинами SCOL)

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

Ветвления (условия) в SCOL

Ветвления осуществляются с помощью конструкции if - then - else.
Код:
if<условие> then <инструкции> else <инструкции>
Более сложный пример:

Код:
if (((условие1) && (условие2)) || (условие3)) then
(
    инструкции
)
else if (условие4) then
(
    инструкции
)
else
(
    инструкции
)
Простые условия, например, x < 5, заключать в скобки не обязательно, но всё же рекомендуется. Для других случаев заключать условия в скобки необходимо.
Будьте осторожны, if <условие> then <инструкции> else <инструкции> - это одна команда! Поэтому точку с запятой можно ставить только в конце последней инструкции блока else.

Пример:

Код:
fun main ()=
    _showconsole;

    srand time;
    let ((rand&255)*100)>>8 -> x in    // случайное значение
    if (x < 10) then
        _fooS "x is small"    // нет точки с запятой!
    else if (x > 90) then
        _fooS "x is big"    // нет точки с запятой!
    else
        _fooS "x is medium";    // точку с запятой ставим тут!
    0;;
Другой пример:

Код:
fun main ()=
    _showconsole;

    srand time;
    let ((rand&255)*100)>>8 -> x in    // случайное значение
    let mod x 2 -> m in        // остаток от деления x на 2
    if m == 0 then
    (
        _fooS strcat "x = " itoa x;
        _fooS strcat "x is even";
    )    // нет точки с запятой!
    else
    (
        _fooS strcat "x = " itoa x;
        _fooS strcat "x is uneven";
    );    // точку с запятой ставим тут!
    0;;

Последний раз редактировалось Avatar-Z; 27.11.2015 в 22:31.
Avatar-Z вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод ячейки на Русский Юнлинг Microsoft Office Excel 7 04.10.2015 20:16
OpenSpace3D - перевод хэлпа на русский Avatar-Z Софт 18 06.09.2015 23:51
Перевод программы на русский язык. shivo Фриланс 1 05.01.2011 15:20
перевод на русский Ensoph Общие вопросы Delphi 3 19.05.2008 10:09