Ioプログラミング言語には、lispのapply関数に相当するものがありますか。
たとえば、writelnをラップするメソッドがあります。
mymeth := method(
//do some extra stuff
writeln(call message arguments))
)
現時点では、これはリストを出力するだけであり、その内容を独自の引数であるかのように評価しません。
Ioプログラミング言語には、lispのapply関数に相当するものがありますか。
たとえば、writelnをラップするメソッドがあります。
mymeth := method(
//do some extra stuff
writeln(call message arguments))
)
現時点では、これはリストを出力するだけであり、その内容を独自の引数であるかのように評価しません。
evalArgs を提案してくれた人に感謝します (コメントがどこにあるのかわかりません)。
とにかく、私の状況では解決しましたが、残念ながら一般的にはそうではないと思います.
私が説明することを行うことで達成できます:
writeln(call evalArgs join)
これにより、すべての引数が評価され、結果が 1 つの文字列に結合されます。
Lispのapply関数に相当するものはありますか?
perform
&performWithArgList
メソッドを参照してください。
少し戻るとFUNCALL
、Io ではいくつかの異なる方法でLisp を複製できます。
plotf := method (fn, min, max, step,
for (i, min, max, step,
fn call(i) roundDown repeat(write("*"))
writeln
)
)
plotf( block(n, n exp), 0, 4, 1/2 )
plotm := method (msg, min, max, step,
for (i, min, max, step,
i doMessage(msg) roundDown repeat(write("*"))
writeln
)
)
plotm( message(exp), 0, 4, 1/2 )
plots := method (str, min, max, step,
for (i, min, max, step,
i perform(str) roundDown repeat(write("*"))
writeln
)
)
plots( "exp", 0, 4, 1/2 )
APPLY
したがって、これらすべてから、次のような
Lisp を作成できます。
apply := method (
args := call message argsEvaluatedIn(call sender)
fn := args removeFirst
performWithArgList( fn, args )
)
apply( "plotf", block(n, n exp), 0, 4, 1/2 )
apply( "plotm", message(exp), 0, 4, 1/2 )
apply( "plots", "exp", 0, 4, 1/2 )