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