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) + 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