我最近开始学习 Oz/Mozart,为了练习,我正在尝试编写一个简单的“For”程序的代码,该程序从“Init”循环到“End”值,并在每个循环中打印当前循环编号到浏览器。这是代码:
此过程创建一个从 Init 到 End 值的列表:
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
最后,我调用 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 行是“fun {ForList FL}”)
我尝试在一些子例程中交换“func”和“proc”以查看是否有变化,但我真的不知道我做错了什么。