私は最近Oz/Mozartを学び始めました。練習のために、「Init」から「End」の値にループし、各サイクルで現在の値を出力する単純な「For」プロシージャのコードを記述しようとしています。ブラウザへのサイクル番号。コードは次のとおりです。
この手順では、初期値から終了値までのリストを作成します。
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 {ForListFL}」です)
いくつかのサブルーチンで「func」と「proc」を入れ替えて、何かが変わるかどうかを確認しようとしましたが、何が間違っているのか本当にわかりません。