Идея ЯП - рекурентное описание вычислительной таблицы
От: cppguard  
Дата: 10.06.22 11:29
Оценка:
По мотивам одного проекта, в котором нужно было переводить формулы из таблиц в код, родилась идея языка:
# x, y, z обновляются на каждой итерации

# Тут всё понятно
f: cos(x * y)

# Тут тоже всё понятно
g: z * f

# Функция зависит от значения на прошлом шаге,
# значение на первом шаге задаётся в явном виде.
h = 1
h: @ + g


Всё это транслируется в, например, это:
function __f66() {
  __double[4] = cos(__double[1] * __double[0]);
  return true;
}

function __g67() {
  __double[3] = z * __double[4];
  return true;
}

__double[2] = 1;
function __h68() {
  __double[2] = __double[2] + __double[3];
  return true;
}

while (hasNextInput()) {
  __double[0] = nextDouble();
  __double[1] = nextDouble();
  if (__f66() || __g67()) __h68();
}


Значения вызываются в порядке зависимостей, и вычисление очередной ячейки происходит только в случае, когда хотя бы одна зависимость обновились. "return true" это тривиальный случай, но могут быть функции, которые, например, накапливают значения. Это пока наброски. Можно добавить работу с окнами, зависимость от двух, трёх, N-значений назад. По сравнению с явным программированием таких зависимостей такой формат удобен тем, что освобождает от необходимости хранить промежуточный результат, если от него зависит более одной функции. А использование массива и доступ к его элементам в порядке увеличения индекса позволяет эффективно нагружать кэш процессора. Уверен, что кто-то что-то подобное должен был придумать. Но я ничего не нашёл
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.