哪些编程语言不将 if 视为语法?

Which programming languages don't treat if as syntax?

提问人:sondra.kinsey 提问时间:10/5/2023 最后编辑:sondra.kinsey 更新时间:10/15/2023 访问量:64

问:

在哪种编程语言中,条件块(如果)在语法上与函数调用没有区别,包括在错误条件下执行的任何“其他”代码块?换句话说,用什么语言可以定义一个函数,然后可以互换调用?an_alternative_if_functionif

例如,在 Ruby 中,if 子句可以这样表示:

if(a > 20){
  puts("A is greater than 20.")
}

至少在该块中,看起来与任何其他函数相似。看起来好像这个函数随后被传递一个表达式作为参数/参数,并且还传递了一个代码块,事实上,在以下函数式 Ruby 代码片段中也发生了:ifif

def an_alternative_if_function(condition){
  yield if condition
}

an_alternative_if_function(a > 20){
  puts("A is greater than 20.")
}

但是,Ruby 并不是我问题的正确答案,因为 Ruby 函数无法以这种方式接受子句。以下语法不正确elseif

an_alternative_if_function(a > 20){
  puts("A is greater than 20.")
} else {
  puts("A is not greater than 20.")
}

更新:我下面对Lisp的猜测是不正确的。请参阅答案。

另一方面,我认为 Lisp 是我问题的一个正确答案,因为在下面的示例代码中,if 显示为接受 3 个参数的函数:

(if (> a 20)
   (write-line "A is greater than 20.") 
   (write-line "A is not greater than 20."))

我不关心编译器和解释器的实现细节。我唯一关心的是,对于阅读代码的程序员来说,在语法上是否与其他函数区分开来。if

语法 编程语言 语言设计

评论

0赞 user207421 10/5/2023
我相信Lisp确实如此,但不要引用我的话;--)
0赞 linuxfan says Reinstate Monica 10/5/2023
在我看来,Tcl 可以按照你说的去做。

答:

0赞 SK-logic 10/12/2023 #1

Smalltalk 就是一个没有特殊语法的例子 - 只有一个布尔对象的消息。ififTrue:

如果你认为纯 lambda 演算是一种语言,那也没有什么特别之处——你只是用 Church 布尔值来代替。if

像 SK 这样的组合系统也是如此,具有相同的 Church 布尔值。

在Lisp中,除非是一些非常奇特的懒惰Lisp,否则它是一种特殊的形式,而不是函数应用程序,因为在大多数Lisp中必须首先计算函数参数。if

评论

0赞 sondra.kinsey 10/14/2023
感谢您纠正我需要对参数进行延迟计算,而大多数编程语言(包括 Lisp)中的函数都使用严格的计算if