我最近開始學習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