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 |