Я хотел бы что-то вроде этого:
each[i_, {1,2,3},
  Print[i]
]
Или, в более общем смысле, для деструктурирования произвольных элементов в списке, над которым вы работаете, например:
each[{i_, j_}, {{1,10}, {2,20}, {3,30}},
  Print[i*j]
]
 Обычно вы хотите использовать Map или другие чисто функциональные конструкции и избегать нефункционального стиля программирования, где вы используете побочные эффекты. Но вот пример, где я думаю, что конструкция для каждого чрезвычайно полезна:
Скажем, у меня есть список опций (правил), которые связывают символы с выражениями, как
attrVals = {a -> 7, b -> 8, c -> 9}
Теперь я хочу создать хеш-таблицу, в которой я делаю очевидное сопоставление этих символов с этими числами. Я не думаю, что есть более чистый способ сделать это, чем
each[a_ -> v_, attrVals, h[a] = v]
Дополнительные тестовые случаи
В этом примере мы преобразуем список переменных:
a = 1;
b = 2;
c = 3;
each[i_, {a,b,c}, i = f[i]]
 После вышесказанного {a,b,c} следует оценить как {f[1],f[2],f[3]}. Обратите внимание, что это означает, что второй аргумент для each должен оставаться неоцененным, если это список.
Если неоцененная форма не является списком, она должна оценить второй аргумент. Например:
each[i_, Rest[{a,b,c}], Print[i]]
 Это должно вывести значения b и c.
 Приложение: Для правильной работы каждого из них он должен поддерживать Break[] и Continue[]. Я не уверен, как это реализовать. Возможно, его нужно будет каким-то образом реализовать в терминах For, While или Do, поскольку это единственные конструкции цикла, которые поддерживают Break[] и Continue[].
 И еще одна проблема с ответами: они едят Return[] s. То есть, если вы используете цикл ForEach в функции и хотите вернуться из функции внутри цикла, вы не сможете. Возврат Return внутри цикла ForEach, похоже, работает как Continue[]. Это просто (подожди) бросило меня в тупик.
