像Racket这样的语言不需要返回语句来给调用者一个值。例如:
(define (myfunc)
(1))
为什么C#等其他语言有明确的return关键字?这个关键字真的有用吗,还是只是为了更清晰?
答案 0 :(得分:2)
这是典型的函数式语言,函数返回最后一次计算的表达式。
在命令式上下文中,这是一个不切实际的限制,因为通常会提前返回,例如在查看数组是否包含某个元素时
contains(array, element) {
for(el in array) {
if(el == element) return true;
}
return false;
}
而在功能上下文中,您可以使用递归来完成此操作
(define (contains array element)
(cond
((empty? array) false)
((eq (head array) element) true)
(else (contains (tail array) element))))
答案 1 :(得分:0)
您的问题与the difference between a function and a procedure有些相关。 功能编程语言仅支持函数,因为它们以“功能方式”促进编写代码的范例,意思是,没有side effects,这意味着你应该总是返回一些东西(结果)
这并不意味着你不能用功能编程语言编写非功能代码,例如,Scheme有!set
。也就是说 - 由于它是一种非功能性模式,因此不鼓励使用它。