【发布时间】:2016-07-13 16:31:50
【问题描述】:
这是代码中的问题:
(foreach n l_pt
(write-line
(strcat "sommet" str_sep
(itoa (setq (nbs (+1 nbs )))) str_sep
(rtos (car n) 2 2) str_sep
(rtos (cadr n) 2 2) str_sep
(strcat "2") str_sep
(strcat "borne")
)
f_open
)
)
;;(write-line "" f_open)
我在输出中有这些类型的文件:
索梅茨;;
类型;编号;X;Y;精度;性质
sommet;1;1532292.16;3214140.11;2;承担
sommet;2;1532287.08;3214140.60;2;承担
sommet;1;1532291.45;3214136.43;2;承担
sommet;2;1532286.50;3214135.87;2;承担
sommet;1;1532287.08;3214140.60;2;承担
正如您所猜到的,有问题的部分是“Num”没有按预期工作,正在递增。
我知道这是这一行:“ (itoa (setq (nbs (+1 nbs )))) str_se” 没有按预期工作,但我不知道为什么。我尝试将其切换为 (setq (nbs (+ 1 nbs))),但它也不起作用。
你有什么想法吗?
【问题讨论】:
-
(+ 1 nbs)是否与(+1 nbs)做完全相同的事情? -
Lisp 家族语言中的表单一般写成
(operator arg1 arg2 ...)。在赋值运算符setq的情况下,自变量顺序为(setq <place> <new value>)。这意味着(setq (nbs (+1 nbs)))是错误的,应该是(setq nbs (+ 1 nbs))。 -
很好,@Joshua。当你习惯了在
()中使用函数参数的语言时,很容易错过这种事情。您可能想将其发布为答案。 (顺便说一句,+1可能是一个已定义的增量函数,(+1 nbs)返回与(+ 1 nbs)相同的值。但后一种形式显然是正确的。) -
@Feldur 当然,这里是:link
-
你能检查一下像这样的最小示例会发生什么吗?
(defun test (/ counter) (foreach n '(a b c) (write-line (itoa (setq counter (+ 1 counter))))))