Oz
- Дата создания:
- 1991
- Создан под влиянием:
- Парадигма:
- Типизация:
- Диалекты:
- Реализации и версии (свернуть все | развернуть все):
Oz — мультипарадигменный язык программирования. Включает в себя поддержку большинства распространенных концепций: процедурное (императивное) программирование, функциональное, логическое, объектно-ориентированное, параллельное и распределенное. При этом имеет простую семантику и синтаксис.
Наиболее развитый транслятор и среда выполнения — Mozart.
Разработан в 1991 году.
Элементы синтаксиса:
Комментарий до конца строки | % |
---|---|
Комментарии, которые могут быть вложенными | /* ... */ |
Присваивание значения переменной | <varname> = <value> |
Объявление переменной | local V1 = e V2 = e2 in ... end |
Группировка выражений | ( ... ) |
Равенство | == |
Неравенство | \= |
Сравнение | < > =< >= |
Определение функции | fun { f para1 para2 } ... end |
Вызов функции | {f a b} |
Вызов функции без параметров | {f} |
Если - то | if condition then ... end |
Если - то - иначе | if condition then ... else ... end |
Примеры:
Hello, World!:
Пример для версий Mozart 1.4.0functor
import
Application
System
define
{System.showInfo 'Hello, World!'}
{Application.exit 0}
end
Числа Фибоначчи:
Пример для версий Mozart 1.4.0Используется рекурсивное определение чисел Фибоначчи. Отметим, что в языке Oz значения переменным можно присваивать только один раз, поэтому для накопления вывода приходится использовать тип Cell
— контейнер на один элемент.
functor
import
Application System
define
fun{Fib N}
fun{Loop N A B}
if N == 0 then
B
else
{Loop N-1 A+B A}
end
end
in
{Loop N 1 0}
end
local
S
in
S = {NewCell ""}
for I in 1..16 do
S := {Append {Append @S {Int.toString {Fib I}}} ", "}
end
{System.showInfo {Append @S "..."}}
{Application.exit 0}
end
end
Числа Фибоначчи:
Пример для версий Mozart 1.4.0Используется итеративное определение чисел Фибоначчи.
functor
import
Application System
define
local
A B C S
in
A = {NewCell 0}
B = {NewCell 1}
C = {NewCell 0}
S = {NewCell ""}
for I in 1..16 do
C := @A + @B
A := @B
B := @C
S := {Append {Append @S {Int.toString @A}} ", "}
end
{System.showInfo {Append @S "..."}}
{Application.exit 0}
end
end
Факториал:
Пример для версий Mozart 1.4.0Используется итеративное определение факториала.
functor
import
Application System
define
local
F
in
F = {NewCell 1}
for I in 0..16 do
{System.showInfo {Append {Append {Int.toString I} "! = "} {Int.toString @F}}}
F := (I+1) * @F
end
{Application.exit 0}
end
end
Квадратное уравнение:
Пример для версий Mozart 1.4.0Oz — строго типизированный язык, поэтому все преобразования между строковыми и числовыми типами выполняются в явном виде. Коэффициенты преобразуются вначале в целые числа, а потом в числа с плавающей точкой, потому что при попытке преобразовать строку “1” сразу в число с плавающей точкой возникает ошибка (строка “1.” преобразуется нормально). Унарный минус в Oz обозначается ~
.
functor
import
Application System Open
define
local
A B C D
class TextFile from Open.file Open.text end
StdIn = {New TextFile init(name:stdin)}
in
{System.showInfo "A = "}
A = {Int.toFloat {String.toInt {StdIn getS($)}}}
if A==0 then
{System.showInfo "Not a quadratic equation."}
{Application.exit 0}
end
{System.showInfo "B = "}
B = {Int.toFloat {String.toInt {StdIn getS($)}}}
{System.showInfo "C = "}
C = {Int.toFloat {String.toInt {StdIn getS($)}}}
D = B*B - 4.0*A*C
if D==0.0 then
{System.showInfo "x = "#{Float.toString ~0.5*B/A}}
{Application.exit 0}
end
if D>0.0 then
{System.showInfo "x1 = "#{Float.toString ~0.5*(B-{Sqrt D})/A}}
{System.showInfo "x2 = "#{Float.toString ~0.5*(B+{Sqrt D})/A}}
else
{System.showInfo "x1 = ("#{Float.toString ~0.5*B/A}#","#{Float.toString 0.5*{Sqrt ~D}/A}#")"}
{System.showInfo "x2 = ("#{Float.toString ~0.5*B/A}#","#{Float.toString ~0.5*{Sqrt ~D}/A}#")"}
end
{Application.exit 0}
end
end
Комментарии
]]>blog comments powered by Disqus
]]>