No OneTemporary

File Metadata

Created
Sat, Mar 14, 4:34 AM
diff --git a/scripts/ftransform.li b/scripts/ftransform.li
new file mode 100644
index 0000000..d75c454
--- /dev/null
+++ b/scripts/ftransform.li
@@ -0,0 +1,26 @@
+//преобразование параметров функции
+
+function(first-function, vars-list(var(x, i32), var(y, i32)), i32,
+ div(add(x, 5), y))
+
+--------------------------------------------------------------------------------------------------
+
+type(name(ListNode), struct(
+ field(name(caption), type(String)),
+ field(name(args), type(collection(ListNode)))
+))
+
+
+
+transform(
+ name(f-transform), guard(var(name(X), constraints(caption(simple-function)))),
+ body(
+ set (args, field(X, args),
+
+
+ wrap(extract(args, 0), caption(name)),
+
+ wrap
+ name(field())
+ )
+)
diff --git a/scripts/input.xreate b/scripts/input.xreate
new file mode 100644
index 0000000..679b16f
--- /dev/null
+++ b/scripts/input.xreate
@@ -0,0 +1,16 @@
+find6 = function: bool
+{
+ x = [1, 2, 3, 4, 5, 6, 7]: [num]; //эффективная инициализация
+ y = map (x) [el]-> {2 * el};
+
+ exists(y, 12);
+}
+
+exists = function: (list:[a], el: a)->bool
+{
+ acc: bool;
+ acc = reduce(list, false) [el, acc] ->
+ {
+ acc = acc & (el == e): saturated(true);
+ }
+}
diff --git a/scripts/intersection.li2 b/scripts/intersection.li2
new file mode 100644
index 0000000..6ce957a
--- /dev/null
+++ b/scripts/intersection.li2
@@ -0,0 +1,93 @@
+// пример реализации процедуры определения пересечения двух множеств
+//
+//
+// A, B - два множества
+
+
+Iterator (Set set) : (Set set, int pos)
+
+next(Iterator Set i): action of Iterator{
+ pos++;
+
+ return i;
+}
+
+written El_Type x = Iterator/Set/El_Type i : substitution{
+ x = i.pos;
+}
+
+
+A overtake B: action of Iterator {
+ elB = current (B); //эта команда может превратиться просто в использование elA из вызывающей функции, используя аннотацию context или bag
+
+ repeat-post elA<elB
+ elA = next(A);
+
+ return elA;
+}
+
+intersect(Set A, B) : function, return Set = {
+ A, B : sorted
+ Set RESULT-SET;
+
+with Iterator
+ repeat
+ elA = next(A); // при первом вызове указывает на первый элемент
+ elB = next(B);
+
+ if (elA > elB)
+ elB = B overtake A;
+ else
+ elA = A overake B;
+
+ if (elA == elB)
+ put(RESULT-SET, elA);
+
+return RESULT-SET
+}
+
+// repeat - бесконечный повтор?
+// repeat-pre - повтор с предусловием, repeat-post - повтор с постусловием
+
+
+
+
+ Работа с Map:
+ Пример отображения(view), пример №1:
+
+Map/(KEY, VALUE): type = [(KEY, VALUE)];
+
+Map-T ([KEY], [VALUE]): view, pairs: Map/(KEY, VALUE) = {
+ keys = map pairs, pair
+ (key, ) = pair;
+ key
+
+ values = map pairs, pair
+ (, value) = pair;
+ value
+
+ return (keys, values)
+}
+
+//(SELECT key, SELECT value) - возможно ли в функцию передавать названия поля, с кот. ей нужно работать.. ?
+
+ Пример №2 (свести к поиску 6):
+
+find6: function = {
+x: [int] = [1, 2, 3, 4, 5, 6, 7]; //эффективная инициализация!
+
+y = map x, el
+ 2 * el
+
+return exists(x, 12);
+}
+
+
+/**
+ * Построить:
+ * сортировка :- необходимо ordered-list(linked-list, tree-list)
+ * RA доступ :- желательно hash-list или желательно tree-list
+ * последовательный доступ :- желательно ordered-list
+ *
+ *
+Necessarily and ◇ for Possibly
\ No newline at end of file
diff --git a/scripts/opcode.comments b/scripts/opcode.comments
new file mode 100644
index 0000000..31c457b
--- /dev/null
+++ b/scripts/opcode.comments
@@ -0,0 +1,30 @@
+
+/*
+
+ASTLispNode
+
+
+transform(
+
+ function(__name, __vars), function(name(__name), vars-list(__vars), body(function.body)
+)
+*/
+
+
+add(y, div(add(x, 5), 15))))
+
+
+opcode(add, LLVMAddInstruction)
+opcode(div, LLVMDivideInstruction)
+
+function(name(first-function),
+ vars-list(var(name(x), type(i32)), var(name(y), type(i32))),
+ return(type(i32)),
+ body(
+ div(add(x, 5), y)))
+
+function (name(second-f), vars-list, return(type(i32)), body(
+ add(add (10, 20), first-function(11, 80))
+))
+
+main(second-f)
\ No newline at end of file
diff --git a/scripts/opcode.li b/scripts/opcode.li
new file mode 100644
index 0000000..5f62311
--- /dev/null
+++ b/scripts/opcode.li
@@ -0,0 +1,14 @@
+opcode(add, LLVMAddInstruction)
+opcode(div, LLVMDivideInstruction)
+
+function(name(first-function),
+ vars-list(var(name(x), type(i32)), var(name(y), type(i32))),
+ return(type(i32)),
+ body(
+ div(add(x, 5), y)))
+
+function (name(second-f), vars-list, return(type(i32)), body(
+ add(add (10, 20), first-function(80, 11))
+))
+
+main(second-f)
\ No newline at end of file

Event Timeline