打印输入数字的总和

Print the sum of entered numbers

我正在使用命令提示符和记事本,但无法打印输入数字的总和。

我试过了

 (format t "Sum ~d ~%" I don't know what should put here)   
 
and I know if I put num then there's no value

这是我的代码

(princ"Enter how many numbers to read: ")
(defparameter a(read))

(defun num ()
  (loop repeat a
        sum (progn 
              (format *query-io* "Enter a number: ")
              (finish-output)
              (parse-integer (read-line *query-io* )))))

(num)

谢谢

你快到了。而不是下面的 ...format 需要一个数字:

(format t "Sum ~d ~%" ...)   

如果你输入 num,这将不起作用

(format t "Sum ~d ~%" num)

因为 num 引用了一个名为 num 的变量,它在您的环境中不存在。您定义了一个名为 num 函数 。该函数在调用时会计算一个值,因此您需要 调用 名为 num.

的函数

你在 Lisp 中调用函数的方式是写 (num),这是用零参数调用函数 num 的语法。

同样,你也可以调用 (funcall #'num),这有点不同:funcall 接受一个函数 object 并调用它,而 #'num 是访问绑定到符号 num 的函数对象的语法。事实上 #'num(function num) 的一种更短的写法,其中 function 是一个特殊的运算符,它知道如何 return 一个给定名称的可调用对象。

你的情况可以直接写(num),如下:

(format t "Sum ~d ~%" (num))   

这种形式的计算首先按顺序计算所有参数,T,控制字符串,然后是(num)。在评估 (num) 时,它会提示输入 a 个数字。最终,由于循环,它将 return 和,并且 format 的参数将是已知的。然后 format 将被执行,其所有参数将绑定到计算值。