Pull to refresh

Система автоматической унификации назначений данных (САУНД) разрабатывается для повышения внятности программирования. Идея обсуждалась ранее. Приведем эксперименты по созданию спецификации языка программирования.

def c = add(a, b, carry=0):
  not a and not b =>
    carry => c = [carry]  else => c = []
  else =>
    not a => @a = [0]
    not b => @b = [0]
    a = [a' x]
    b = [b' y]
    last = (x + y + carry) % base
    new_carry = (x + y + carry) // base
    c = [add(a', b', new_carry), last]


def m = findmin(a):
  m = nil
  a =>
    run enumerate(i=a.begin):
      i < a.end =>
        *i < *m => m = i
        enumerate(i.next)
      

def sort(@a):
  a =>
    a = [x a']
    i = findmin(a')
    swap(@x, *i)
    sort(@a')


def s = sum(a):
  a =>
    a = [x a']
    s = x + sum(a')
  else =>
    s = 0


def pythagorean_table(n):
  run rows(i=1):  i <= n  =>
    run cols(j=1):  j <= n  =>
      print(i * j)
      cols(j + 1)
    print("\n")
    rows(i + 1)    

Условные конструкции обозначаются символом =>, вместо циклов - рекурсивный вызов функции-блока.

Квадратные скобки обозначают операцию создания списка либо добавления элемента к списку, аналогично MATLAB.

Символ @ используется при вызове функций, чтобы указать на возможность модификации переменной.

Символ * перед переменной обозначает операцию разыменования итератора.

Ключевое слово run используется для запуска функции-блока.

В языке отсутствуют операторы, прерывающие ход выполнения программы, такие как return, break, continue.

Tags:
Total votes 3: ↑2 and ↓1+1
Comments0

Articles