一位同事说他听说过一种没有“如果”概念的语言。那可能吗?如果是这样,它是什么语言?
答案 0 :(得分:6)
除了Prolog之外,我不知道任何特定的语言,但我可以想到一些没有语句的语言可能有用的方法。实际上,您也不需要循环结构。你显然需要一些条件分支和循环方式。
例如,如果您具有以下功能:功能,函数参数上的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
当然,您仍然需要通常的比较运算符,然后您可以使用简单的true / false函数参数模式匹配而不是条件。或者你可以匹配任意值。或者语言可以支持保护表达式,这些表达式基本上是判断函数重载是否有效的语句。
上面的例子显然是做作的,没有ifs / loops的代码比原版更加丑陋和难以理解,但它演示了如何做到。更多或不同的语言功能可以在没有if / loops的情况下编写干净的程序。
另一种方式是这样的,如果是真== 1和假== 0。
[function(){else-clause}, function(){then-clause}][condition]()
也就是说,将true和false分支存储在列表或元组或任何可以通过true和false索引的内容中,然后使用条件的结果作为索引,查找分支并调用函数。如果您的语言支持宏,则可能会将传统的条件转换为此格式。
答案 1 :(得分:4)
Smalltalk,被认为是一种“真正的”面向对象语言,没有“if”语句,它没有“for”语句,没有“while”语句。还有其他一些例子(比如Haskell),但这是一个很好的例子。 资料来源:Without ifs
答案 2 :(得分:3)
C ++模板编程没有'if'结构,但是通过模板专业化来完成Turing:
template <int N>
struct Factorial
{
enum { value = N * Factorial<N - 1>::value };
};
template <>
struct Factorial<0>
{
enum { value = 1 };
};
// Factorial<4>::value == 24
// Factorial<0>::value == 1
答案 3 :(得分:1)
我认为一种语言必须有一些做出选择的方法才能成为Turing-Complete。但是,这意味着不一定是你的经典if语句形式。
最熟悉的例子可能是正则表达式语言。 (a | b *)根据|
的相反方面做出决定。不完全是“if”声明。
答案 4 :(得分:1)
逻辑语言由语句组成。查询的结果是一种逻辑评估,用于检查结果是否由“编码”的规则组承担。
例如,请查看Prolog。