我正在學習常用lisp我已經從uVA數據庫(http://acm.uva.es/p/v101/10120.html)和一個廣度搜索函數(它將啓動點,目標點和一個合法的動作生成器),我已經理解了我如何才能得到答案,但Lisp只是不同意我。關於如何從這一點開始,我可以提供一些建議嗎?下面是給出的問題和我的兩個嘗試解決方案與lisp源代碼的鏈接。任何幫助將不勝感激!謝謝!UVa 10120禮物?在Common Lisp中?
1.
(defun gift (N G)
(setq CR 9)
(setq i 3)
(cond ((= N G) "N and G equal")
((< N G) "Gift it on a rock outside limits")
((> N 49) "number of rocks is bigger than 49 - it will work")
((< N 9) "number of rocks is less than 9, it wont work")
((= N 0) "number of rocks is 0, it wont work")
((= G 0) "gift isn't on a rock, it wont work"))
(loop
(setq I (+ I 1))
(setq I (-(* I 2) 1))
(setq CR 9)
(breadth-search CR G #'lmg-moves)
(when (= CR G) (return "Let me Try!"))
(when (> CR N) (return "Don't laugh at me!"))
))
(defun lmg-moves (I)
(list (+ 9 I)
(- 9 I)
))
2.
(defvar *currentRock* 9)
(defvar *iterator* 3)
(defun gift (N G)
(setq *iterator* (+ *iterator* 1))
;; (breadth-search *currentRock* G #'LMG)
)
(defun LMG (a)
(+ a (-(* *iterator* 2) 1))
)
正如上面可以看到,一般的想法是簡單地適用廣度搜索功能與給定的合法的移動發電機,希望通過分析它的輸出,我們可以確定我們是否可以達到目標狀態。如果上面的代碼太混亂,我會很樂意回答任何問題,再次感謝!
你需要聲明變量 – 2012-02-01 22:19:41