Здравствуйте, limax, Вы писали:
L>==============8<===========================
L>Цель: построить мета-язык описания любых процессов (в частности программирования, ввода-вывода), более сложные функции которого выражаются ТОЛЬКО через набор базовых.
L>В UML такое отсутствует: сложные конструкции обрабатываются частным образом, а не с помощью базовых, отсюда — слишком много первоначальных определений (в машинном языке). К тому же чётко фиксированы мета-уровни: объект может быть экземпляром класса только соседнего уровня (3M->2M, 2M->Model, Model->Object).
вот описание процесса работы на компьютере
//RAISE SPECIFICATION LANGUAGE
-- compile
/*
круговорот бит в природе
/---------\
/>---------------->|keyboard |>------------------>\
| | | |
|>---------------->|mouse |>------------------>|
| | | |
|>---------------->|screen |>------------------>|
| \---------/ |
\--< USER <-\ /---< SYSTEM <--/-\
| /---------\ | |
brain |<----<|screen |<--<|>----> DB >------/
| | | |
\<----<|printer |<--</
\---------/
*/
scheme WORD = class -- вначале было слово
type
Input, Output, DataBase --, Memory
channel
keyboard, mouse, screenI: Input,
-- special kind of screen like screen of palmPilot
printer, screenO : Output
variable
db : DataBase
-- brain : Memory = для симметричности картинки userу
-- можно приписать мозги. Но часто их нет. Будем рассчитвывть на
-- худший случай
value
USER: Unit -> in printer, screenO out keyboard, mouse, screenI Unit,
SYSTEM : Unit -> in keyboard, mouse, screenI out printer, screenO Unit,
userWork : Output -> Input,
systemWork : Input -> write db Output
axiom
USER() is -- пусть v -результат чтения пользователем екрана компьютера
let v = screenO? in ( -- screen0? - ввод с екрана в мозги пользователя
keyboard! userWork(v) |^| -- вывод рез.работы на клавиатуру
-- |^| операция внутреннего выбора
-- пользователь сам выбирает чем двигать
-- мышкой или клавой или экраном
mouse! userWork(v) |^| -- или кликнул мышкой
screenI! userWork(v) -- или тыцнул в экран
)
end |=| -- операция внешнего выбора
let v = printer? in ( -- копьютер заставляет пользователя
keyboard! userWork(v) |^| -- читать, то куда он вывел
mouse! userWork(v) |^|
screenI! userWork(v)
)
end
; USER()
,
SYSTEM() is
let v = keyboard? in ( -- пусть v - результат опроса копьютером клавы
screenO! systemWork(v) |^| -- результаты своей работы
printer! systemWork(v) -- вывел на экран или принтер
)
end |=| -- тут пользователь заставляет
-- компьютер читать его команды
let v = mouse? in (
screenO! systemWork(v) |^|
printer! systemWork(v)
)
end |=|
let v = screenI? in (
screenO! systemWork(v) |^|
printer! systemWork(v)
)
end
; SYSTEM()
end