true-grue писал(а):
ArtemKAD писал(а):
Как по мне конкретно этот пример не слишком понятнее чем
Вот то-то и оно. Вкусовщина. В Форте ведь вообще много странностей, с точки зрения популярных ЯП. Давайте все "исправим". Или могу подсказать Вам несколько языков, где "локалсы" очень органично смотрятся, а не являют собой "костыль", как в Форте.
На что исправим? На еще одну странность? А смысл менять?
true-grue писал(а):
Вон, в Forth 200x придумывают очередной вариант locals. Антон Эртл в одной из статей о локальных переменных отзывается, как о перегруженных ограничениями и одном из слабейших элементов текущего стандарта. Не говоря уже о том, что 99% фортеров, включая автора языка, вообще полностью обходят стороной эту, чужеродную вычислительной модели Форта, конструкцию.
Берем SPF, открываем папку devel и делаем в ней поиск по слову locals ... Результат 231 файл. Причем и Черезов и Немцов (создатели наиболее известных продуктов) ими активно пользуются... Да и у остальных почти всех локалсы так или иначе проскакивают.
true-grue писал(а):
Кстати, если Вы из тех, кто в любой форумной дискуссии пытается любой ценой оставить за собой последнее слово, то я легко предоставлю такую возможность.
Об этом можете даже не беспокоиться. Если я задаю вопросы, то естественно жду на них ответы, а не желаю их сделать последним словом
...
true-grue писал(а):
ArtemKAD писал(а):
формальное правило заставило описывать, что с первым и вторым элементом ничего не произошло...
Вот это уже по существу! На этот случай нотацию можно доработать примерно в таком духе. Если уж очень хочется.
Код:
: count> ( x array - x count)
0 swap each: { x count element - .. x} > if 1 + then ;
И что поменялось? Ввели еще одно правило не убрав суть.
ЗЗЫ. Кстати, еще 6 лет назад у chess была такая мысль
chess писал(а):
Предлагаю ввести дополнительные синтаксические конструкции для работы с параметрами на стеке параметров.
s11 эквивалент DUP
s21 эквивалент SWAP
s231 эквивалент ROT
s312 эквивалент -ROT
s121 эквивалент OVER
s1212 - 2DUP
s2 - NIP
s212 - SWAP NIP
s112 - TUCK
Исходно перед операцией со стеком, требующей манипуляции с n параметрами на вершине стека лежит параметр обозначаемый в слове s1..n номером n.
Программист без заморочек пишет нужное выражение, например s2132. При этом понимается, что стек параметров
изначально имел вид 123, а в конечном итоге будет иметь вид 2132.
Ваш пример манипуляции выглядел бы так:
s1231
Хотя для полноты там не хватает указания со сколькими элементами исходного стека мы работаем (если убрать самый верхний(или глубокий - откуда будем считать) элемент).