浏览代码

Обновлено 2015-07-17-лола.md

Пётр 10 年之前
父节点
当前提交
aab2d4d643
共有 1 个文件被更改,包括 31 次插入29 次删除
  1. 31 29
      _posts/2015-07-17-лола.md

+ 31 - 29
_posts/2015-07-17-лола.md

@@ -2,43 +2,45 @@
 published: true
 ---
 
+
+
 ## Изучая Lola
 
 Поизучал описание языка [Lola](http://www.inf.ethz.ch/personal/wirth/Lola/index.html), в итоге понял, что MODULE это такая радиодеталь с ножками, вход/выход, внутренние преобразования по заданным функциям, вот это всё.
 Подумал над применением в программировании акторов или агентов, ведь агент это та же радиодеталь, датчики как входы, манипуляторы, как выходы. На программном урове, это всё, конечно, укладывается в понятия направленного канала сообщений и сообщения. Сообщением в LEAF можно сделать любой тип данных, передавать можно значения, или даже указатели, если они будут защищены от записи.
 
 Придумалось тут:
+```oberon
+UNIT Fib
+	VAR res+, n- INTEGER
+	VAR f Fib
+PROCESS
+	f.n <- n - 1
+	res <- IF n # 0 THEN n + f.res ELSE 1 END
+END Fib
 
-  UNIT Fib
-      VAR res+, n- INTEGER
-      VAR f Fib
-  PROCESS
-      f.n <- n - 1
-      res <- IF n # 0 THEN n + f.res ELSE 1 END
-  END Fib
-  
-  UNIT Fact
-      VAR res+, n- INTEGER
-      REG x INTEGER
-  INIT
-      x <- 1
-  PROCESS
-      res <- IF n = 0 THEN x END
-      x <- IF n # 0 THEN x*n ELSE 1 END
-      n <- IF n # 0 THEN n - 1 END
-  END Fact
-  
-  UNIT Top
-      REG x, y INTEGER
-      VAR fi Fib
-      VAR fa Fact
-  PROCESS
-      fi.n <- 10
-      x <- IF x = 0 THEN fi.res END
-      fa.n <- 10
-      y <- IF y = 0 THEN fa.res END
-  END Top
+UNIT Fact
+	VAR res+, n- INTEGER
+	REG x INTEGER
+INIT
+	x <- 1
+PROCESS
+	res <- IF n = 0 THEN x END
+	x <- IF n # 0 THEN x*n ELSE 1 END
+	n <- IF n # 0 THEN n - 1 END
+END Fact
 
+UNIT Top
+	REG x, y INTEGER
+	VAR fi Fib
+	VAR fa Fact
+PROCESS
+	fi.n <- 10
+	x <- IF x = 0 THEN fi.res END
+	fa.n <- 10
+	y <- IF y = 0 THEN fa.res END
+END Top
+```
 
 В целом, как и в Lola, есть только инструкция присваивания. Точнее даже не присваивания, а ожидания. Вся активность модулей определяется итерациями инструкций внутри секции PROCESS. Формально, это статичное описание состояния, а не итерации, но исполнять иначе не получится. По завершению первой итерации модуль `Top` ожидает от `Fib` и `Fact` сообщений из выходного канала `res`, так как условие `x = 0` истинно.
 Наверное, так устроены все декларативные языки.