Я думаю, что это будет неопределенный вопрос, потому что я не знаю точно, что я делаю в первую очередь, но здесь это происходит.
Мне нужно решить проблему Ханоя в общих списках, используя списки. В основном функция берет список строк (имен) и затем перемещает их из колышка A в колышек C, используя колышек B для хранения, сохраняя их в том же порядке, в котором они были в списке.
Я никогда раньше не использовал lisp, и мне очень сложно понять синтаксис.
Это мой код до сих пор
Goo функция является работа Ханоя
(defparameter A '())
(defparameter B '())
(defparameter C '())
(defun findPeg (p1 p2) (cond ((= 0 (- 3 p1 p2))A)
((= 1 (- 3 p1 p2))B) ((= 2 (- 3 p1 p2))C)))
(defun getnum (x) (cond ((equalp x A) 0)((equalp x B)1)((equalp x C) 2)))
(defun hanoi (x) (defparameter A x) (setlength A)(goo len A C B))
(defun setlength(x) (defparameter len (list-length x)))
(defun goo (leng from to via)
(cond ((= leng 1)(push (pop A) C)) ;base case
((goo (1- leng) from via to)(push (pop A) B) ;say/do something i think
((goo (1- leng) via to from)(push (pop B) C) ;say/do something i think
))))
Моя проблема с рекурсивными вызовами. Я очень смущен тем, что именно я должен делать. Я знаю, что, очевидно, мне нужно переместить первую строку в первом списке на другой колышек, но я не знаю, какой колышек или даже как манипулировать списками. Я чувствую, что должен использовать переменные, которые были переданы в функцию goo, но я не могу понять, как их редактировать, потому что когда я изменяю их в функции, внешние переменные не меняются.
Прямо сейчас я сталкиваюсь с ошибкой
* - СИСТЕМА ::% EXPAND-FORM: (GOO (1-LENG) ОТ VIA TO) должно быть лямбда-выражением
Это рекурсивный вызов, поэтому я не знаю, почему он так говорит.
По сути, я просто хочу несколько советов или уловок о том, где продолжить или когда перезапустить, потому что я даже не знаю, хороший ли мой подход.
Все очень ценится. Спасибо