使用美圓符號命名變量,直接就設置成全局變量了,這個和 Ruby 同樣,一比較 Ruby 強迫性的命名規範有點讓人不舒服。程序員
> (set '$var 123) > (context 'Foo) > $var => 123
NewLISP 容許用 @array, %hash, $var 這樣的名稱命名變量,這樣就能夠讓 Perl 風格的代碼能夠存在了。架構
爲防止一些變量被意外修改,程序員老是粗枝大葉的,能夠對一個變量進行保護less
> (constant 'read-ony-var 3.14159) > (set 'read-only-var 3.14) ERR: symbol is protected in function set ' read-only-var
使用 context 能夠對一個內置函數進行重寫,這樣就能夠用另一個空間定義一種方言了。函數
但應當有一些符號不能被重寫,if unless cond define let etc .. primitive symbolcode
經過對命名空間的從新賦值,能夠實現一個變量的別名hash
> (set 'Foo:var 12) > (set 'Doo Foo) > Doo:var => 12 > Foo:var => 12
因爲 context 自己就是一個變量,能夠經過對這個變量的操做,實現對符號表的操做,這是一個強大的功能,但也十分危險。這也是一個優良架構的特徵,自己能夠被修改和擴展。it
context define symbol is global and protected with constant, So rewrite a symbol respresente a context is error.io
一個模塊應當以 (context MAIN) 結束。 一個腳本或程序應當以 (exit) 結束。function
用命名空間來模擬散列的行爲,有個問題,命名空間是全局變量,而散列多是局部的,如何模擬局部的散列呢?變量
模塊的導出和加載,有沒有保護機制呢?限制導出的符號表,限制導入的符號表。這些在優良的架構下,都是能夠實現的。
提早調用的一個函數必須事先聲明
(define Fubar::Fubar)
Newlisp 的命名空間不能嵌套,只是單層的,多層的能夠模擬。這個架構不是問題。