簡介,特點,支持示例,對donet的支持,函式定義與賦值,GTK庫接口,對資料庫的支持,xlist vs. xml,JVM 支持,Android 支持,
簡介
《運算元》(TeaScript)給你一種不同的編程方法,將 AutoCAD 實體給 Windows 作業系統,用 OS 共享庫直接擴展 AutoCAD 應用程式。你可以在另外的進程空間做 AutoCAD,Sketchup...... 喜歡 Lisp 的愛好者,可以用TeaScript IDE 寫 Lisp 程式,不用開打厚重的 AutoCAD 中 Visual Lisp,它們的界面很像,調試也非常方便。使用 Lisp 的編程基礎來開發 Web 套用,資料庫......。新增聊吧,語句摺疊,FormDesigner 等功能。

特點
TeaScript 是一個動態的面向對象的函式式程式語言,它的特點如下:
1. TVM 引擎支持 Lisp、JavaScript、Python、Ruby、Lua、Pascal、Basic 等多種語法。
2. TVM 超微型核心引擎(不足500kb),擁有幾百個實用函式。 核心模組非常緊湊,所需系統資源很小,因此與其他語言相比載入執行起來更加快速。
3. TVM 建立在通用的 UNIX 系統的 C 語言庫函式基礎上, 可以運行在各種作業系統平台,如
Windows (95、98、2000、XP、Win7、Win10),Linux,BSDs,Mac OS 等。
4. TVM 引擎可以進行原始碼連結,生成獨立的執行檔。
5. TVM 引擎以共享庫庫的方式可以嵌入到宿主系統中,可作為套用開發的語言平台。
6. 動態腳本語言,簡單易學,模組化集成,同時具有教學語言的優點: 透明和友好提示。
7. 支持符號單元運算, 任何符號都可以用作定義計算的行為,突破了以往計算機編程漢字僅能作為字元串數據來處理的局面, 可將任何符號(例如:中文、簡繁體漢字、少數民族語言文字)作為計算機代碼來運行。
8. 面向對象,基於原型繼承。
9. 函式式編程涵蓋 LISP 語言抽象語法、獨特的符號、表達式處理等突出特點。
10. 同時擁有 C 語言的訪問底層數據單元,執行系統操作的靈活快捷的特點,和 C 語言一樣可以定義結構,訪問結構成員和進行指針操作。
11. 動態語言弱類型,數據使用前無需宣告聲明。 而C語言在編譯的過程中須明確運算元的記憶體單元大小和長度,因此使用前必須事先申明變數符號和函式符號的數據類型。
12. 集中強化符號和表達式的處理和操作。包括修改,插入,刪除複雜嵌套列表和多維數組結構中的元素。
13. 具有多態函式的特點,參與函式運算的參數類型不限和參數個數不限,這使得定義函式有很強的靈活性。
14. 函式是特殊的列表,可以象操作列表一樣來對函式進行組合和拆分。 除了定義函式外,可以用宏實現重構表達式。
15. 支持流的輸入輸出操作,可以包含控制字元的二進制數據訪問。
16. 支持Perl語言兼容的正則表達式(PCRE)文本處理。
17. 具有記憶體垃圾自動收集的功能。當對象不再被引用時,它們所占用的記憶體空間自動被回收後再利用。
18. 擁有對象、符號目錄,供多人協作完成的大型軟體項目,既可以引用他人的目標模組,又可以避免變數或函式重名的覆蓋危險。
19. 除了使用內建函式外,還可以通過導入共享庫來進行功能擴展。 比如調用 Windows 作業系統的庫函式來實現GUI界面,使用 COM 對、.NET 框架等等。
20. TeaScript 可運用於分布計算、科學統計、圖形與圖像和人工智慧領域。 HTTP、 TCP/IP 和 UDP 套節字界面使得它很容易編寫網路應用程式。
支持示例
本條內容展示了 TeaScript 對各種 OA 軟體 com 接口的例子。
teascript擴展套用

對donet的支持
(using System)
(using System.Drawing)
(using System.Windows.Forms)
(setq form1 (new Form)
form1.Text "TeaScript 編寫的 .NET 視窗")
(setq btn (new Button)
btn.Text "按鈕")
(form1.Controls.Add btn)
(dnfun btn_Click(Sender EventArgs)
(MessageBox.Show "Hi, TeaScript !" "Click" MessageBoxButtons.$OKCancel MessageBoxIcon.$Question)
)
(Application.Run form1)
函式定義與賦值
函式定義:
(fn f(x y &args / a b)
...)
(def f(x y &args / a b)
...)
(define (f x y &args , a b)
...)
(defun f(x y &args / a b)
...)
fn f(x &args){
...
}
function f(x &args){
...
}
匿名函式:
(fn (x y &args / a b)
...)
(lambda ()
...)
fn (x &args){
...
}
function (x &args){
...
}
賦值語句:
(setq x (+ y z))
(set 'x (+ y z))
x = y + z;
GTK庫接口
(load "gtk.lsp")
(gtk.init)
(setq window (new gtk.Window))
(setq window.title "TeaScript_GTK window 你好")
(setq window.position gtk.WIN_POS_CENTER)
(setq window.default_size '(300 200))
(setq btn (new gtk.Button "Button"))
(setq btn.size_request '(75 30))
(window.add btn)
(window.show_all)
;; Define event callback
(gtkfun window_delete_event()
(gtk.main_quit)
(exit))
(gtkfun btn_clicked()
(println "button Click!" window.title))
;; Mainloop
(gtk.main)
對資料庫的支持
(defun sqlite_get_column_names(dbread / tblst lst i)
(setq tblst '())
(setq lst '())
(dotimes (i dbread.FieldCount)
(push (dbread.GetName i) lst -1))
(push lst tblst -1)
tblst)
(defun sqlite_get_row_values(dbread / tblst lst i otype obj)
(setq tblst '())
(while (dbread.Read)
(setq lst '())
(dotimes (i dbread.FieldCount)
(setq otype (dbread.GetFieldType i))
(push
(case (otype.ToString)
("System.;Int32" (dbread.GetInt32 i));;去掉分號
("System.Double" (dbread.GetDouble i))
("System.String" (dbread.GetString i))
(true (setq obj (dbread.GetValue i))
(obj.ToString)))
lst -1)
)
(push lst tblst -1)
)
tblst)
;; 導入SQLite .NET 命名空間
(using "D:/TeaScript/System.Data.SQLite.dll")
;; 打開指定的資料庫檔案
(setq db_path "test.db")
(setq dbconn (new SQLiteConnection (string "Data Source = " db_path)))
;;(dbconn.SetPassword "my_password") ;; 如果資料庫需要密碼
(dbconn.Open)
;; 創建命令行查詢對象,後面可以重複使用
(setq dbcmd (new SQLiteCommand "" dbconn))
;; 查詢資料庫中是否已經定義過"商品庫存"表,如果沒有則創建;;sqlite_master 是所有數據表的根
(setq dbcmd.CommandText "SELECT tbl_name FROM sqlite_master WHERE type = 'table';")
(setq dbread (dbcmd.ExecuteReader))
(setq tbl_names (sqlite_get_row_values dbread))
(dbread.Close)
(if (nil? (ref "商品庫存" tbl_names));;找列表索引喔
(progn
(setq dbcmd.CommandText "create table 商品庫存 (商品名稱 CHAR(20), 數量 INT(3), 價格 FLOAT(10));")
(dbcmd.ExecuteNonQuery)
))
;; 通過命令行查詢,添加新的記錄
(setq dbcmd.CommandText "insert into 商品庫存 values ('蘋果', 11, 1.234);")
(dbcmd.ExecuteNonQuery) ;; 不需要返回數據
(setq dbcmd.CommandText "insert into 商品庫存 values ('桔子', 22, 2.345);")
(dbcmd.ExecuteNonQuery)
(setq dbcmd.CommandText "insert into 商品庫存 values ('香蕉', 33, 3.456);")
(dbcmd.ExecuteNonQuery)
;; 通過命令行查詢,返回所有記錄
(setq dbcmd.CommandText "select * from 商品庫存;")
(setq dbread (dbcmd.ExecuteReader)) ;; 需要返回數據
(sqlite_get_column_names dbread) ;; 獲取所有欄位的標題
(sqlite_get_row_values dbread) ;; 返回數據中的所有記錄內容
(dbread.Close) ;; 返回數據處理後,不要忘記要關閉 Reader 對象
;; 按條件來查詢
(setq dbcmd.CommandText "select 商品名稱, 數量 from 商品庫存 where 數量 < 20 order by 商品名稱;")
(setq dbread (dbcmd.ExecuteReader))
(sqlite_get_row_values dbread)
(dbread.Close) ;; 關閉 Reader 對象
;; 關閉資料庫檔案
(dbconn.Close)
xlist vs. xml
(setq txt (readFile "腦補連線“))
(if (regex "charset=UTF-8" txt) (setq txt (encode txt 0 "utf8")))
(setq lst (readXml txt))
(setq linklst (map #(lst %1) (refAll '(a *) lst match)))
(setq targetlst (map #(pop linklst %1) (refAll '(target *)
linklst match)))
(setq body (xmlist linklst))
(setq htmltxt (Xml `(:html
(:head
(:meta :http-equiv "Content-Type" :content "text/html; charset=gb2312")
(:title "網頁連結匯總表"))
(:body ,@body))))
(writeFile "d:/linklist.html" htmltxt)
JVM 支持
支持 JVM,可用 Swing 控制項編輯互動界面。

Android 支持
支持矩陣計算,也可以簡單的切換成中綴表達式。科學計算更方便了。
