[情報] 電腦輔助工程製圖LISP的除錯

看板NTUMETA作者 (金色惡夢魔王)時間16年前 (2008/04/22 10:52), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串1/2 (看更多)
撰寫AutoLISP時常見的錯誤 Word檔案下載 http://www.sendspace.com/file/cqk1tx 國力台灣大學機械工程學系 96學年度下學期電腦輔助工程製圖助教 林錦德 首先要說怎麼避免錯誤 最常見的錯誤就是打錯字,例如p0與po、p1與pl。這個問題多半是心不在焉,腦袋空空看 著人家寫什麼就打什麼。如果是自己去建構撰寫的結構,就不會發生這種錯誤,因為自己 很清楚那是什麼。(所以下次讓我抓到這種錯誤,就等於是告訴我,你是在COPY黑板或講 義)這類錯誤經常伴隨的錯誤訊息是 ; error: bad argument type: 2D/3D point: nil 第二種常見的錯誤就是function錯誤,LISP的格式多是 ( func arg arg arg ... ) LIST中的第一個元素是 function,其餘為argument。打錯function也是很常見的,例如 (setq)打成了(setg)。最有效的方法是利用進階的編輯軟體,例如AutoCAD提供的Visual LISP Editor,或是UltraEdit掛上LISP的語法高亮度設定。如此,只要打出正確的 function,該function的字就會變成藍色。而這類軟體也多半會附加上括號檢查。 另一種造成錯誤的原因是沒有在fun與arg間留空格,例如: (setqa b) 他會出現 ; error: no function definition: SETQA 所以以後看到這行錯誤,就用編輯器的搜尋功能,搜尋字串 (SETQA ,看看哪裡打錯了。 最後一種常見的錯誤是命令錯誤,也就是(command)執行不完全。例如要畫一條聚合線, p1至p2是直線,p2至p4是弧線,該中心為p3,p4至p5是直線 下面這個例子是錯誤的,因為p4跟p5也變成弧線了 (command "pline" p1 p2 "arc" "ce" p3 p4 p5 "") 要修正這個錯誤,就是自己到作圖區打上pline然後操作一次,這邊就不給解答了。又另 外一提的是,Autocad對arc的設定是逆時針方向,請務必記住。 這邊是一些常用的除錯技巧 載入撰寫好的LISP時 只要看到; error 那就是有問題了。不要一廂情願的還去跑程式 ,那保證是你上次載入還沒被覆蓋的錯誤資訊。看到error就好好瞭解發生什麼事情,以 下是幾種常見的錯誤: ; error: syntax error 這是語法錯誤。一般邏輯func會限制後面的argument數量,或指定其格式。例如 (if T 2 3)是對的,如果打成了(if T 2 3 4) 或(if T),就保證出現這個錯誤。檢查時就是去 看func後面的argument數量是否充裕。 ; error: too few arguments ; error: too many arguments 先嘗試在autocad的命令列中打(polar a b)與(polar a b c d),abcd先不用定義。這個 錯誤很簡單,就是polar後面會跟隨三個argument,多了或少了都會出錯。這常發生在定 義argument時括號打錯位置,例如 (polar '(0 0 (+ pi (/ pi 2) 5))) 這其實只是打錯一個括號而已。一樣,這也是檢查func後面的argument是否充裕。 又你把上面的問題修正成(polar a b c)後 又出現新的問題 ; error: bad argument type: 2D/3D point: nil 前面提到,func後面會跟隨argument,很多func對argument的型態(type)很重視,例如 polar的第一個argument一定是2D或3D點,其餘兩個都是實數。這時候因為a沒有定義,也 就是a=nil,所以autocad回應"我需要2D/3D point,但是卻得到nil"。解決方法很容易, 就是把a設定為點資料就可以了。 這邊show幾個例子,試著看看為什麼 (getreal a) ; error: bad argument type: stringp nil (+ a 1) ; error: bad argument type: numberp: nil 檢查的方法就是看出問題的argument,他所用參數是不是定義正確了。 其他大多是括號出錯的錯誤有 ; error: malformed list on input 看到這個錯誤就是缺括號,其他還有兩個錯誤,會直接告訴撰寫者少打的是哪一邊的括號 (我試不出來例子) 如果沒把握的話,考試請印一份在旁邊看吧! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.230.59

04/22 17:44, , 1F
大推~感謝助教的用心
04/22 17:44, 1F

04/23 08:51, , 2F
有推有下 謝助教
04/23 08:51, 2F
文章代碼(AID): #183LBh-W (NTUMETA)
文章代碼(AID): #183LBh-W (NTUMETA)