更新 2:删除示例,因为它们具有误导性。下面的那些更相关。
我的问题:
有没有这种结构的编程语言?
更新: 现在当我想到它时,Prolog 也有类似的东西。我什至允许在定义行定义操作。(忘记回溯和关系——想想语法)
我问这个问题是因为我相信,在语言中具有对称性是一件好事。“输入”参数和“输出”参数之间的对称性。
如果返回这样的值很容易,我们可以放弃使用设计语言的显式返回。
重播对......我认为这是一个黑客行为。我们不需要数据结构来将多个参数传递给函数。
更新 2:
举一个我正在寻找的语法示例:
f (s, d&) = // & indicates 'out' variable
d = s+s.
main =
f("say twice", &twice) // & indicates 'out' variable declaration
print(twice)
main2 =
print (f("say twice", _))
或功能+序言风格
f $s (s+s). // use $ to mark that s will get it's value in other part of the code
main =
f "say twice" $twice // on call site the second parameter will get it's value from
print twice
main2 =
print (f "Say twice" $_) // anonymous variable
在提议的语言中,没有表达式,因为所有返回都是通过参数。这在深层层次函数调用很自然的情况下会很麻烦。口齿不清的例子:
(let x (* (+ 1 2) (+ 3 4))) // equivalent to C x = ((1 + 2) * (3 + 4))
将需要所有临时变量的语言名称:
+ 1 2 res1
+ 3 4 res2
* res1 res2 x
所以我建议匿名变量将整个函数调用转换为该变量的值:
* (+ 1 2 _) (+ 3 4 _)
这不是很自然,因为我们有所有的文化包袱,但我想抛弃我们目前对语法的所有成见。