Помимо, возможно, Пролога, я не знаю каких-либо конкретных языков, но я могу придумать несколько способов использования языка без , если могут работать операторы .На самом деле, вам также не нужны циклические конструкции.Очевидно, вам нужен какой-то способ условных переходов и циклов.
Если, например, у вас есть следующие возможности: функции , сопоставление с образцом в стиле ML в аргументах функций и оптимизация хвостового вызова , вы можете программировать без циклов if или.
foo () {
for (i = 1 to 10) {
if even(i) {
print "even"
}
}
}
станет чем-то вроде
print_if_true (true) {
print "even"
}
print_if_true (false) {}
foo_loop (11) {
}
foo_loop (n) {
print_if_true(even(n))
foo_loop(n+1)
}
foo () {
foo_loop(1)
}
или с ML-подобным синтаксисом:
foo =>
let loop 11 => 0
n => p_i_t(n), loop n + 1
and p_i_t true => print "even"
_ => unit
in
loop 1
end
Конечно, вам все еще нужны обычные операторы сравнения, и тогда вы можете использовать простое сопоставление с аргументом функции истина / ложь вместо условных выражений.Или вы можете сопоставить произвольные значения.Или же язык может поддерживать защитные выражения, которые в основном представляют собой операторы if, которые определяют, допустима ли перегрузка функции.
Приведенный выше пример, очевидно, надуман, а код без ifs / циклов намного сложнее и сложнеепонять, чем оригинал, но это демонстрирует, как вы можете сделать.Дополнительные или другие языковые возможности позволяют писать чистые программы без циклов if /.
Другой способ будет выглядеть примерно так, если true == 1 и false == 0.
[function(){else-clause}, function(){then-clause}][condition]()
То есть, сохраните ветвь истина и ложь в списке или кортеже или в том, что у вас есть, что можно проиндексировать с помощью истинных и ложных значений, а затем используйте результат условия в качестве индекса, найдите ветвь и вызовите функцию.Если ваш язык поддерживает макросы, возможно, возможно перевести традиционные условные выражения в этот формат.