我正在学习Ada,因为我对严格的类型安全和编程合约的想法很感兴趣。 “永远编程”的想法很好。无论如何,真正的问题是Ada是否具有可变的功能。搜索SO suggests Ada没有,正确的方法是使用无约束的数组,其长度在运行时确定。Variadic Ada功能
我的问题是,你不是怎么做的,而是正确的做法是什么?另外,为什么Ada可以像+(例如1 + 2 + 3)那样执行(似乎是基于堆栈的操作),但是它不能对函数调用的参数执行相同的操作?
难道不是像 Max(1, 2, 3, ..., n)
一样不要做可变表情吗?还是仅仅是你应该把参数传递给它,如Args.len=n; Max(Args[])
?
我的直觉和从阅读各种Ada书籍中收集到的信息表明,由于它们不太安全,因此不应该有非特定功能。
http://stackoverflow.com/questions/8776677/calling-scanf-from-ada/8875664 对此深感抱歉! – Bronze
我不明白'1 + 2 + 3'的部分。首先,没有任何关于它的堆栈。通常情况下,如果参数是变量,它会将寄存器添加到一起,并将结果放入另一个寄存器中,并且它不会靠近堆栈。其次,你的问题似乎意味着''可变'有关'+',但没有。 '“+”'是一个带有两个参数的函数,即句点。你想添加更多的数字,你必须多次调用该函数。你可以用Ada中的任何其他函数('Func(a,Func(b,Func(c,...)))')来完成。 – ajb
我明白为什么它会令人困惑。我也看到我的逻辑错误。在我的学校教育中,我听说大多数计算器都是用堆栈计算的,深夜我问的问题更有意义。 – Bronze