發表文章

目前顯示的是 5月, 2021的文章

什麼是"正確"及"不正確"?

圖片
 在寫壓力容器計算的程式時,有一段法規上說。在判斷最小厚度時,有以下.....。 其中在非致死性作業下,... 熱交換器的換熱管 (tube) 可不受最小厚度 1.5 mm的限制的規定。 怎麼在程式中表示"非"致死性呢?我直覺就想到。如果一個承壓件在其屬性中表示,它是非致死性作業。  (let ((hash1 (make-hash-table)))      (setf (gethash 'is-lethal-service  hash1) nil)       hash1) 其中要如何判斷它是否為真,或是"正確"一般的作法是 (let ((hash1 (make-hash-table)))    .    .    . (if (equal (gethash 'is-lethal-service hash1) t)      (print t)      (print nil))) 但是 (gethash 'is-lethal-service hash1) 取回的值為多值。所以它傳回 T T 二個數值,第一個是屬產的值 'T ,第二個值為表示 'is-lethal-service 在 hash1 這個雜湊表中有此鍵值。那如果在 hash1 的雜湊表中沒有這個鍵值,即沒 'is-lethal-service 這個 key ;它回傳值就變成 nil nil 了。所以在使用雜湊表儲存屬性值時,要先確認它在雜湊表中是否有鍵值,再來判別其屬性值為何。 一般 common lisp 程式除了 nil 之外都是真值。而使用雜湊儲存資料時會造成以上的困擾。所以在使用上我設定了判斷壓力容器參數真值的判斷程式。  ;; 以下為確認"正"     (defun true-p (obj)       (if (or (equal obj t)           (equal obj "t")           (equal obj "T")           (equal obj "TRUE")           (equal obj "true")           (equal obj &

將 common lisp 放在 USB 隨身碟中

圖片
 在 Windows 使用環境中無法在未安裝 sbcl 的環境中使用 common lisp。在網路上有一此方便啟動 common lisp 環境的工具,例如 Roswell ,但是今天想要介紹另一款實用的方式 LispStick!   ListStick! 是用於 Microsoft Windows 的完整 Common Lisp 開發環境。它 包含 SBCL,Emacs,SLIME 和 Quicklisp 。且 它僅適用於其自己的安裝目錄。 對於在 USB 隨身碟上進行安裝,所以說 您將始終擁有Common Lisp 項目和 Quicklisp 安裝。 下載和安裝 下載及解壓縮以下檔案 Lispstick ZIP 。只需將 Lispstick zip 文件解壓縮到您選擇的磁碟上即可。 您最終會得到一些目錄,例如D:\ LispStick。 然後點擊其中包含的 RUN.BAT 檔案,以啟動 Emacs / SLIME / SBCL。 升級 LispStick 依 LispStick 網頁中,以上提到的 Emacs / SLIME / SBCL / Quicklisp  都可以各自升級到最新版本。請見 LispStick! 。 心得 在使用  LispStick 安裝在隨身碟中後,我可以在未安裝 SBCL 的電腦上使用 common lisp 及使用 Emacs。而調整軟體中的 RUN.BAT 可以配合實際使用需求,升級 Emacs 及 SBCL。它不會一開始就安裝很多花俏的模組,使用上單純很多。  如果對於程式開發有任何建議,請留言研究討論。 壓力容器設計 各申機械設計工作室