也许除了 Prolog 之外,我不知道任何特定的语言,但我可以想到一些没有 if 语句 的语言可以工作的方式。事实上,您也不需要循环结构。您显然需要某种条件分支和循环方式。
例如,如果您具有以下特性:函数、函数参数上的 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/loops 的代码比原来的代码更丑陋,更难理解,但它展示了你如何做到这一点。更多或不同的语言特性可能使编写没有 if/循环的干净程序成为可能。
另一种方法是这样的,如果 true == 1 和 false == 0。
[function(){else-clause}, function(){then-clause}][condition]()
也就是说,将真假分支存储在一个列表或元组或任何你有的可以被真假索引的东西中,然后使用条件的结果作为索引,查找分支并调用函数。如果您的语言支持宏,则可能会将传统条件句翻译成这种格式。