我最近开始学习Oz/Mozart,并且为了练习,我正在编写一个简单的“For”过程的代码,从“Init”到“End”值,并在每个循环中将当前循环编号打印到浏览器。下面是代码:我的“For”循环代码中的参数错误(Oz/Mozart)
此过程创建从初始化列表,以终值:
declare
fun {Listing Init End}
if Init == End then
[Init]
else
Init|{Listing Init+1 End}
end
end
这做循环,每个循环应用函数“F”:
declare ForList
fun {ForList F L}
case L of H|T then
{F H}|{ForList F T}
else nil end
end
这包装上述功能,以便可以工作接收Init和End值,而不是列表:
declare MyFor L X in
proc {MyFor F Init End}
L = {Listing Init End}
X = {ForList F L}
end
Final LY,我叫MyFor:
{MyFor Browse 1 4}
当我尝试编译,我得到这个错误:
%*************** Error: illegal number of arguments *************
%**
%** In statement: {<P/1 Browse> 1 _<optimized>}
%** Expected: 1 argument
%** Found: 2 arguments
%**
%** Call Stack:
%** procedure 'ForList' in file "Oz", line 11, column 0, PC = 15793
(行11 “好玩{ForList FL}”)
我我尝试在某些子程序中调换“func”和“proc”来查看是否有什么变化,但是我真的不知道我做错了什么。
你的代码中缺少一些东西。你似乎没有在任何地方调用'ForList'? – wmeyer 2013-03-18 21:11:34
我的猜测是你正在调用'ForList'而不消耗结果。在Oz中,函数的返回值也被认为是一个参数。所以它是必须使用它(与'Res = {Function Arg1 Arg2}''一样的赋值)。 – wmeyer 2013-03-18 22:19:24
是的,对不起,我现在编辑过(对ForList的调用在MyFor的声明中)。 我已经添加了变量X来保存For List的返回值,但是现在我收到了一个类似的错误(我已将它放入编辑的消息中)。我试图在我调用MyFor时也保留返回值,但这也不起作用,而是它给了我这个错误: %***************错误:非法的参数数量********* %**在声明:{
1 4一} %**预计:3个参数 %**:4个参数 –
Granjero
2013-03-19 02:42:47