Viivi 00.09 リリース・ノート < Viiviの小部屋 < 入り口 / Entrance
第00.09.00版では,第00.08.00版から以下のような改良を行いました.
コマンドラインオプション
-D Nまたは手続き呼び出し
(viivi-set! direct-input-objects N)ただし
N は1,2,4のビット和を与えることにより,オブジェクトを直接表現する表現式
(例) #<procedure:let> ; 組み込み済み手続き let #<procedure:cos> ; 組み込み済み手続き cos #<constant:PI> ; Viivi 独自拡張,定数値円周率 など
#<unspecified>
#<nil>
このオプションを導入した主な目的は次の2点です:
1> (define (func arg) (if arg 100 200)) ; クロージャの定義 2> (func #t) ; 100 となる.これは問題ない. 3> (define if list) ; トップレベルで if を上書きしたら 4> (func #t) ; (#t 100 200) となる.100 となるべきなのか?このような場合, クロージャ定義時に組み込み済み手続き「if」の直接指定を使えば 問題を回避できます.
1> (define (func arg) (#<procedure:if> arg 100 200)) ; 組み込み済み手続き if を直接指定した 2> (func #t) ; 100 となる.これは問題ない. 3> (define if list) ; トップレベルで if を上書きしても 4> (func #t) ; 期待通り 100 となる.トップレベルで変更してしまった束縛関係を 元のものに修復することも可能です.
1> (define cos -) 2> (cos 30) ; --> -30 「cos」が「-」になってしまった! 3> (define cos #<procedure:cos>) ; 修復 4> (cos 30) ; --> 0.15425144988758405 ; cos の本来の挙動に戻った
Viivi 00.09 リリース・ノート < Viiviの小部屋 < 入り口 / Entrance
2011/08/10 開設
2022/03/02 更新
Copyright(C) 2003-2022 ilma <ilma@viivi.io> All rights reserved.