發表文章

目前顯示的是有「Common lisp」標籤的文章

Common Lisp 網路資料

 Common Lisp 庫列表   Awesome Common Lisp CLiki: the common lisp wiki   Common Lisp 入門 The Common Lisp Cookbook ANSI Common Lisp 中文版 Practical Common Lisp (中英文对照版) On lisp  On Lisp 中文版  

自由軟體操作說明書

 Emacs   The Emacs Editor Keyboard Macros : 鍵盤巨集,在 Emacs 可以記錄鍵盤輸入的順序,方便重複的輸入及按鍵作用。  SLIME: The Superior Lisp Interaction Mode for Emacs :common lisp 開發環境 Common Lisp The Common Lisp Cookbook   Database Access and Persistence : 資料庫學習參考資料。   Mito :Mito 是另一個物件關係映射器,支援 MySQL、PostgreSQL 和 SQLite3 。   Awesome Common Lisp :蒐集 common lisp 可推薦的模組及應用程式。 Practical Common Lisp :實用 Common lisp,Common lisp 入門。 On Lisp :進一步的 Common Lisp 學習書。 ASDF: Another System Definition Facility : 於 common lisp 用於定義系統。  Maxima   Maxima Documentation :maxima 說明文件。 文件應用 PlantUML :圖表製作。 Pandoc :通用文件轉換器,轉換各種文件格式。 將常用的參考資料放在網路上,以方便查詢。

將 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。它不會一開始就安裝很多花俏的模組,使用上單純很多。  壓力容器設計 各申機械設計工作室

Emacs Slime mode : slime-tramp 對應遠端檔案路徑

遠端使用 swank 伺服器 在 Emacs slime-connect 連接遠端 SBCL (common lisp) 。 M-x slime-connect  Host: localhost  Port: 4005 Close old connections first? (y or n) y Versions differ: nil (slime) vs. 2.31 (swank). Continue? (y or n) y slime-tramp 的用途 讓 SLIME 在遠端 Lisp 回報檔案路徑時,可以自動轉換成 TRAMP 格式路徑 (像 /ssh:remote-host:/path/to/file.lisp ), 這樣 Emacs 不需要額外的 sshfs 掛載就能直接打開遠端檔案。 不需要手動維護 slime-filename-translations 的 alist,適合「只用 ssh 連線,不掛載遠端檔案」的情境。   自動路徑轉換 當 Lisp 回傳例如: #P"/home/user/project/foo.lisp" Emacs 會自動轉成: /ssh:remote-host:/home/user/project/foo.lisp 相關參數 slime-translate-from-lisp-filename-function      從 Lisp 傳回路徑 → 轉換為 Emacs 可以理解的檔案路徑。 slime-translate-to-lisp-filename-function      從 Emacs 的檔案路徑 → 轉換成 Lisp 端可以理解的路徑。   這兩個通常由 slime-filename-translations 自動設定,不需要手動修改 在 Emacs init.lisp 設定遠端檔案修改儲存 (require 'slime) (slime-setup '( slime-cl-indent                       ...

奇門紀時/ 奇門遁甲排盤

圖片
奇門紀時/ 奇門遁甲排盤: 在網路上取得奇門遁甲的時局  The situation of obtaining Qimen Dunjia on the Internet 奇門遁甲: 教育部國語辭典 術數用語。一種以古代天文律曆學為基礎,以推物及人事吉凶的術數。其法以九宮為本,以三奇、六儀、八門、九星為緯,觀其吉凶,以作趨避。奇指天干的乙、丙、丁,以日生於乙,月明於丙,丁為南極。甲為陽首,戊以下六儀分麗以配九宮,而起符使,故稱為「遁甲」       奇門遁甲 wiki :  「奇門遁甲」的含義是由「奇」「門「.遁甲」三個概念組成。此程式使用「排宮法」放置八門。        奇門遁甲排盤程式設計,依奇門遁甲理論排盤。使用台灣中央氣象局日曆資料表作為依據設定。目前包含到 2024 年份資料。使用子初換日設定。 使用 common lisp (SBCL) 搭配 Emacs org-mode、slime-mode 開發網站程式,以網路瀏覽器連接之後即可作業。 在手機上也可以使用奇門紀時   參考: 中央氣象局天文資料下載     各申機械設計工作室 相關資料  

PDF 表格轉換 CSV 過程 1

圖片
  在建置 ASME 材料資料庫時,依 《如何將 PDF 檔內之的表格載入資料庫》 的規劃,進入了整理文字檔轉換成 CSV 的階段。這時遇到了一個問題,就是當把 PDF 檔擷取到文字檔時,它會把分數切成二行。在之前十幾頁的表格中,我使用了 common lisp 的 cl-ppcre 和 cl-csv 等幾種套件處理文字檔轉換成 CSV。如圖所示,我目前無法控制從 PDF 檔轉換成文字檔(.txt)時的細部動作,例如它有時會轉換分數 "1/2" 變成 "1 \newline" "空格/2" 的情形,如 PDF 畫面標號 3 及文字檔標號2 方框之中所示。這不是一定如此,例如圖示中第 1 列到第 10 列,它們一樣有分數的符號,但是卻無分行的情形。或許換個想法,把文字檔做個處理把它分行的情形修正起來,再用正規表示法處理修正後的文字串。 以前在大學學程式的時候,老師曾說明程式語言可以說百分之九十都在處理字串,希望在處理目前的狀況之後也有相同的領悟。

啓動之圓

圖片
長久以來我認為可以從參數輸入後,設計文件就能自動完成就是專業的像徵。但是從開始工作到現在,就是有一些工作無法自己完成。如自動繪圖後載入文件的功能。以前想到使用 autocad 的 api 搭配排版軟體可以做到。但是想到為了一家商用軟體開發工具,又沒有實質的回饋,就懶了。最好是有基本的繪圖工具再搭配參數的修改,可以快速出版設計文件。 好幾年前接觸到 Common Lisp 之時,對於心中想要完成的工具漸漸的有了雛形。在 2023/9/1 終於測試出 cffi 可以和 c 語言提供的 API 共同操作。能使用 Common Lisp 控制各種軟體一直都是我的目標,現在能夠使用 《libfive》 的 API ,輸出一個圓的文件 (circle.svg) 是一個值得記錄的事。 將來還有許許多多的程式可以整合到工具之中,想到就覺得興奮了起來!

Common lisp 連接微控制器:操作 8x8 LED 陣列

圖片
Common lisp 連接 Arduino UNO 微控制器,操作 8x8 LED 陣列  影片演示     各申機械設計工作室:電子電路實作  

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

 在寫壓力容器計算的程式時,有一段法規上說。在判斷最小厚度時,有以下.....。 其中在非致死性作業下,... 熱交換器的換熱管 (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)           (e...