LISP;符号和全球

时间:2017-04-30 12:12:07

标签: variables lisp global symbols

我的作业有些问题。我的目标是创建代表学生的符号,名称,名称以及他们的预科编号(属性列表)。我也为我创建的所有学生使用了一个全局变量。

我的代码如下所示:

(defun student-create (firstName lastName matr)
(setq newStudent (gensym "studentNr."))
(setf (get 'newStudent 'firstName ) firstName )
(setf (get 'newStudent 'lastName ) lastName)
(setf (get 'newStudent 'matr ) matr)
;(append  (list newStudent)*stu-liste*)  ;no global list?
)

(student-create 'asdf 'dfgh '132654)
(student-create 'a 'b '123)
(student-create 'c 'd '234)
(student-create 'e 'f '345)

所以这是我想要创建学生的功能。我输入姓名和预科号码。

它适用于符号newStudent,但正如您所看到的,该功能不是那么动态。每次我使用该函数时,newStudent都会被覆盖。  此外,我在保存全局变量中的所有符号时遇到问题。

有人能给我一个暗示吗?

1 个答案:

答案 0 :(得分:0)

newStudent被视为代码中的全局变量,这就是每次调用student-create时都会覆盖的原因。您应该使用该知识再次思考如何将学生的列表(或任何数据结构)存储到全局变量中。

每次调用函数时,您想要的是student-create中所需的是对生成的符号的新的本地绑定。您可以使用let来实现此目的。

实际上,这个家庭作业看起来很像the example for get in the CLHS ......