Добыл книжку по историческому языку программирования SETL. Это 1969 год. С этого языка позже начался ABC, превратившийся в известный всем Python. Ходят слухи, что SETL был реализован на БЭСМ-6 академиков Ершовым. Но мне не попадался, увы.

Скачать PDF можно по ссылке: vdoc.pub/download/programming-with-sets-an-introduction-to-setl-7im2bsm23k40. Преодолев противную капчу.
В книжке есть несколько нетривиальных примеров. Вот первый: поиск Эйлерова пути в графе.

Скачать PDF можно по ссылке: vdoc.pub/download/programming-with-sets-an-introduction-to-setl-7im2bsm23k40. Преодолев противную капчу.
В книжке есть несколько нетривиальных примеров. Вот первый: поиск Эйлерова пути в графе.
Интерпретатор SETL нетрудно установить с исходников:#!/usr/bin/env setl
$
$ Example from book "Programming with Sets, An Introduction to SETL", page 406.
$
$ Given an undirected graph G, the Eulerian path problem is to traverse
$ all the edges of G exactly once by a single unbroken path, which starts
$ at some node of the graph and ends at some other node.
$
program Euler; $ Eulerian path construction
graph := {[1,2],[2,3],[3,4],[4,1],[4,2]}; $ a small graph
print(euler_path(graph +
{[y, x] : [x, y] in graph})); $ which is undirected.
proc Euler_path(G); $ constructs Eulerian path for graph G
nodes := domain G; $ all nodes in the graph.
if #(odds := {x in nodes | odd(#G{x})}) > 2 then
return om; $ since more than two nodes are
$ touched by an odd number of
end if; $ edges
$ odds is the set of all nodes of G that are touched by
$ an odd number of edges
x := (arb odds)? arb nodes; $ pick a node of odds if possible;
$ otherwise pick any node of G
path := [x] + build_path(x, G);
(while exists z = path(i) | G{z} /= { })
new_p := build_path(z, G); $ insert new section into path
G - := ({[y, x] : [x, y] in new_p} + {e: e in new_p});
path := path(1..i-I) + new_p + path(i..);
end while;
return path;
end proc Euler_path;
proc build_path(x, rw G); $ builds maximal path section
$ starting at x, and deletes all edges
$ traversed
p := [];
(while (y := arb G{x}) /= om) $ while there exists an edge leaving
$ the last point reached
p with := y; $ extend path to traverse the edge
G - := {[x, y], [y, x]}; $ delete the edge just traversed
x := y; $ step to y
end while;
return p;
end proc build_path;
end program euler; $ Eulerian path construction
Запускаем пример Эйлера:git clone https://github.com/davidjbacon/SETL.git
cd SETL
make
make install
$ ./euler.setl
[2 1 4 2 3 4]

no subject
Date: 2024-05-03 07:59 (UTC)no subject
Date: 2024-05-03 17:10 (UTC)no subject
Date: 2024-05-03 09:05 (UTC)Шварц гений, конечно. Хоть сетл и бестиповой, но функциональный. Может быть, меня сетл и подтолкнул в этом направлении, ещё где-то в 74-м.
no subject
Date: 2024-05-04 21:33 (UTC)no subject
Date: 2024-05-04 21:35 (UTC)Слишком сложно для ширнармасс, с их образованием в области программирования (и с их препами).
no subject
Date: 2024-05-03 17:07 (UTC)Т. е. о системе "Дубна", в которой это было сделано не позднее 1973 года, они не слышали.
no subject
Date: 2024-05-03 23:03 (UTC)Неужели нашпионили?
Не удивлюсь, если новосибирцы в то время работали на голой БЭСМ-6, без всякой "Дубны".
Мне понравилось: "Н.Н. Зыков, Н.П. Шиян и Н.А. Шупта реализовали три разных текстовых макрогенератора."
Исходники простого макропроцессора на языке SETL имеются среди примеров в вышеуказанной книжке. Надо будет попробовать оживить.
no subject
Date: 2024-05-03 23:25 (UTC)в то время
Всё-таки уже 1976 год! Диспаком они, скорее всего, уже пользовались, но вполне возможно, что голым (т. е. "системами программирования" были автокоды МГЧ и БЕМШ, а из языков высокого уровня разве что БЭСМ-Алгол).
no subject
Date: 2024-05-04 21:37 (UTC)В 76-м БЭСМ-Алгол вовсю использовался. Вот не уверен насчёт фортрана.