Memoize |
BasicWerk
EC Support
Technique
Facebook
|
20140717155341_factor_let_and_execute |
factor_let_and_execute
Factor で、レキシカルスコープを作る [| bindings | ... ] という構文ではクォーテーションをスタックに積む。
http://docs.factorcode.org/content/word-[__pipe__,locals.html
よって、実行するには call しなければいけない。
IN: scratchpad auto-use "aaa" [| str | str print ] --- Data stack: "aaa" [ 1 load-locals 0 get-local 1 drop-locals print ] ! ↑ "aaa" というリテラルとクォーテーションが積まれる。 ! call で print が実行される IN: scratchpad auto-use call aaa
これに対し、[let ... ] という parsing word を使った構文では、内部の処理は let を抜けた時点で即実行される(クォーテーション化されない)。
http://docs.factorcode.org/content/word-[let,locals.html
! これだけで "aaa" が print される IN: scratchpad auto-use [let "aaa" :> str str print ] aaa
その他、[let の使い方参考。
IN: scratchpad auto-use { "112" "Nakamura" "Shin" } --- Data stack: { "112" "Nakamura" "Shin" } IN: scratchpad auto-use [let :> row "id:" row first 2array " " join print row rest "name:" prefix " " join print ] id: 112 name: Nakamura Shin IN: scratchpad auto-use { "112" "Nakamura" "Shin" } --- Data stack: { "112" "Nakamura" "Shin" } IN: scratchpad auto-use [let :> row row first :> id row rest " " join :> name "id: " write id print "name: " write name print ] id: 112 name: Nakamura Shin
|
© Shin Nakamura/BasicWerk 2014 |