AutoLisp问题怎么解决

程序员们,初学者遇到些问题,这个里面哪个错了啊,怎么改正呢?


(defun main.lisp (p)
(setq #t 20
    #cell 50
    #i 1
    #j 1) 
(while (<= #i (* m t))
    (while (<= #j (* n t))
        (setq #h (1+ (rem ((1- i) cell)))
        (setq #w (1+ (rem ((1- j) cell)))
        (setq #num1 (floor ((/ (1- i) cell))
              #num2 (floor ((/ (1- j) cell)))
        (setq #gap (/ (cell- m) (/ (* m t) (1- cell))))
        (setq #col (floor  (h+ (* num1 gap)))
              #row (floor  (w+ (* num2 gap))))
(setq #p (command "array" i j "")
      #a (command "array" col row ""))
(setq #a p)
)

援引GPT回答:
在给变量赋值的时候,应该使用setq而不是setq #变量名 值的形式。此外,还有一些括号没有正确关闭,导致语法错误。以下是修改后的代码:

(defun main.lisp (p)
  (setq t 20
        cell 50
        i 1
        j 1) 
  (while (<= i (* m t))
    (while (<= j (* n t))
      (setq h (1+ (rem (1- i) cell)))
      (setq w (1+ (rem (1- j) cell)))
      (setq num1 (floor (/ (1- i) cell)))
      (setq num2 (floor (/ (1- j) cell)))
      (setq gap (/ (- m cell) (/ (* m t) (1- cell))))
      (setq col (floor (+ h (* num1 gap))))
      (setq row (floor (+ w (* num2 gap))))
      (setq p (command "array" i j ""))
      (setq a (command "array" col row ""))
      (setq a p)
      )
    )
  )

请注意,我修改了变量名为小写字母,因为在Lisp中,大写字母通常用于特殊变量或函数名。另外,我也添加了一些缺失的括号来修复语法错误。

【以下回答由 GPT 生成】

问题分析

在给出具体的解决方法之前,我们先来分析一下这个AutoLisp程序中的问题。

  1. 函数定义问题:defun 定义函数时,需要给出函数名和参数列表,而 main.lisp 并不是一个合法的函数名。我们需要将 main.lisp 修改为合法的函数名,比如 defun my-function (p)

  2. 变量命名问题:根据Lisp的命名规则,变量名不能以 # 开头,因此需要修改变量名。

  3. 函数调用问题:程序中使用 (command "array" i j "")(command "array" col row "") 调用了 array 命令,但是没有指定这个命令来自于哪个程序。因此需要使用 (vl-load-com) 加载 vlisp.fas

  4. 括号不匹配问题:代码中存在多处括号不匹配的问题,需要逐个检查并调整括号的位置。

  5. mn 的定义问题:在代码中没有给出 mn 的定义,需要在代码中添加对应的赋值语句。

下面是对上述问题的具体解决方法。

解决方案

根据上述问题分析,我们可以逐步进行如下修改:

  1. 将函数名修改为 my-function,并在函数定义后面添加一个右括号。

(defun my-function (p) (setq num1 20 ... )

  1. 修改变量名,去掉 # 符号,只保留变量名部分。

(defun my-function (p) (setq t 20 cell 50 i 1 j 1) ... )

  1. 在函数开头使用 (vl-load-com) 加载 vlisp.fas

(defun my-function (p) (vl-load-com) (setq t 20 cell 50 i 1 j 1) ... )

  1. 检查括号匹配问题,并进行调整。

(defun my-function (p) (vl-load-com) (setq t 20 cell 50 i 1 j 1) (while (<= i (* m t)) (while (<= j (* n t)) (setq h (1+ (rem (1- i) cell))) (setq w (1+ (rem (1- j) cell))) (setq num1 (floor (/ (1- i) cell))) (setq num2 (floor (/ (1- j) cell))) (setq gap (/ (- cell m) (/ (* m t) (1- cell)))) (setq col (floor (+ h (* num1 gap)))) (setq row (floor (+ w (* num2 gap)))) (setq p (command "array" i j "")) (setq a (command "array" col row ""))) (setq a p) ) )

  1. 添加 mn 的赋值语句。

(defun my-function (p m n) (vl-load-com) (setq t 20 cell 50 i 1 j 1) (while (<= i (* m t)) (while (<= j (* n t)) (setq h (1+ (rem (1- i) cell))) (setq w (1+ (rem (1- j) cell))) (setq num1 (floor (/ (1- i) cell))) (setq num2 (floor (/ (1- j) cell))) (setq gap (/ (- cell m) (/ (* m t) (1- cell)))) (setq col (floor (+ h (* num1 gap)))) (setq row (floor (+ w (* num2 gap)))) (setq p (command "array" i j "")) (setq a (command "array" col row ""))) (setq a p) ) )

这样,我们对原始程序的问题进行了修正,并给出了具体的解决方案。请注意,以上可能只是根据问题的描述进行的推测和修正,具体的解决方案可能还需要根据实际情况进行调整。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^