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

 在寫壓力容器計算的程式時,有一段法規上說。在判斷最小厚度時,有以下.....。

其中在非致死性作業下,... 熱交換器的換熱管 (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 "True")
          (equal obj "Yes")
          (equal obj "yes")
          (equal obj "YES"))
      t
      nil))

 ;; 以下為確認"負"
    (defun false-p (obj)
      (if (or (equal obj nil)
          (equal obj "NO")
          (equal obj "No")
          (equal obj "no")
          (equal obj "FALSE")
          (equal obj "False")
          (equal obj "flase")
          (equal obj "F")
          (equal obj "f"))
      t
      nil))

 在判別屬性值是否為真,或者為否。在壓力容器設計程式中需要確定,出報告時才不會有文不對題的情況發生。 

對於工具程式相關議題討論,可以留言大家一塊研究。


各申機械設計工作室; Each Application Mechanical Design Studio

壓力容器設計 各申機械設計工作室

將 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。它不會一開始就安裝很多花俏的模組,使用上單純很多。 

如果對於程式開發有任何建議,請留言研究討論。

各申機械設計工作室; Each Application Mechanical Design Studio

壓力容器設計 各申機械設計工作室

精選文章

X2Go 中 Emacs GUI 中的中文輸入

 為何要用 X2Go 連接遠端伺服器? 使用 Debian/Linux 很久了,從接觸 Emacs 作為主要的編輯器之後,它就伴隨著我在工作上解決各稱問題。最近我使用的筆電在過了十年之後到了壽命的終結。而此時剛好接到一個案子要到客戶的公司進行認證會議,急需一個熟悉的作業環境。後來...

熱門文章