提问人:sondra.kinsey 提问时间:10/5/2023 最后编辑:sondra.kinsey 更新时间:10/15/2023 访问量:64
哪些编程语言不将 if 视为语法?
Which programming languages don't treat if as syntax?
问:
在哪种编程语言中,条件块(如果)在语法上与函数调用没有区别,包括在错误条件下执行的任何“其他”代码块?换句话说,用什么语言可以定义一个函数,然后可以互换调用?an_alternative_if_function
if
例如,在 Ruby 中,if 子句可以这样表示:
if(a > 20){
puts("A is greater than 20.")
}
至少在该块中,看起来与任何其他函数相似。看起来好像这个函数随后被传递一个表达式作为参数/参数,并且还传递了一个代码块,事实上,在以下函数式 Ruby 代码片段中也发生了:if
if
def an_alternative_if_function(condition){
yield if condition
}
an_alternative_if_function(a > 20){
puts("A is greater than 20.")
}
但是,Ruby 并不是我问题的正确答案,因为 Ruby 函数无法以这种方式接受子句。以下语法不正确:else
if
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赞
SK-logic
10/12/2023
#1
Smalltalk 就是一个没有特殊语法的例子 - 只有一个布尔对象的消息。if
ifTrue:
如果你认为纯 lambda 演算是一种语言,那也没有什么特别之处——你只是用 Church 布尔值来代替。if
像 SK 这样的组合系统也是如此,具有相同的 Church 布尔值。
在Lisp中,除非是一些非常奇特的懒惰Lisp,否则它是一种特殊的形式,而不是函数应用程序,因为在大多数Lisp中必须首先计算函数参数。if
评论