List 创建方案中列表的空列表(racket)

List 创建方案中列表的空列表(racket),list,scheme,racket,List,Scheme,Racket,我是这个计划的初学者,所以如果这对你们来说是一个非常基本的问题,我很抱歉 我正在尝试创建一个空的列表,之后将填充该列表。实现这一点的正确方法是使用对象,但我需要使用列表 假设我们有一个大学系和学生。每个学生都有一些特定的字段,如姓名、gpa等。这些字段由用户确定,因此字段的数量未知。最后,我们在数据库结构中有一些类似的内容: 创建一个包含列的表(表名由用户作为参数指定)(同样,由用户指定) 从视觉上看,列表列表应如下所示: table-name---name1---name2---name3--

我是这个计划的初学者,所以如果这对你们来说是一个非常基本的问题,我很抱歉

我正在尝试创建一个空的列表,之后将填充该列表。实现这一点的正确方法是使用对象,但我需要使用列表

假设我们有一个大学系和学生。每个学生都有一些特定的字段,如姓名、gpa等。这些字段由用户确定,因此字段的数量未知。最后,我们在数据库结构中有一些类似的内容:

创建一个包含列的表(表名由用户作为参数指定)(同样,由用户指定)

从视觉上看,列表列表应如下所示:

table-name---name1---name2---name3---...
-----------------field11----field21---field31--....
-----------------field12----field22---field32--....
.......

创建列表后,我应该能够将记录插入其中。

只需定义一个变量:

(define student-list '())
所以学生名单是空名单。你可以添加任何你想添加的内容。假设您想要添加一个学生。您只需将其添加到空列表:

(set! student-list (cons '(name phone-number etc) student-list))
您只需为学生列表指定一个新值,即列表的上一个值(空列表)和所需的新列表。并且,使用相同的代码,您可以添加另一个学生

在Scheme中,您不必直接确定字段的数量:列表是动态结构。使用
(list stg stg2)
,您可以创建一个名为
(stg stg2)
的列表。但你还有另一个接线员:cons。此函数允许您向列表中添加一些内容:
(cons'stg3(list stg stg2))
,您将获得列表
(stg3 stg stg2)
。您添加了一个字段,而不必“声明”字段或类似的内容。它不像C中那样是一个固定数组。如果您有一个列表,每个列表可以有一个未定义的字段数。比如说

(define student-list)
;;; This is your first empty list.

(define (add-student ids)
  (set! student-list (cons ids student-list)))
;;; ids is the list of name, etc. of student 
;;; you want to insert in the student-list.
此代码定义一个全局变量,并使用您提供给函数add student的数据对其进行更改。这可以是任何东西
'(name phone gpa)
'(name gpa)
等。但是,如果要将列表传递给函数
((定义(添加学生ID))
,例如,将所有学生的列表传递给学生,则不能使用set!。你得用这辆车!并设置cdr

正如在评论中所说,您不必设置一个nil元素的列表,然后完成它们。您可以只使用一个空变量,并在它们出现时用数据填充它

编辑:使用上面的代码,我正在做一些副作用。但你们有另一种方法:在Scheme中,所有东西都有一个返回值。执行
(+12)
时,返回值为3。所以如果你做了
(list(+12)(+14))
,你就会有一个list
”(35)
。所以函数也有一个返回值。在上述代码中,返回值为#void,原因设置!没有返回值。但是,您可以直接返回所需的列表。要执行此操作,您只需删除集合即可

(define (add-student-second students ids)
  (cons ids students))

因此,如果您正在执行
(添加学生秒'((name1))(name2))
,您将得到
((name2)(name1))
作为返回值。在此之后,您只需按照自己的意愿处理数据。

内部空列表的用途是什么?列表中的每个元素都是一个列表。所以大列表对应整个系,而大列表中的每个列表对应一个学生,我指的是数据库中的一个记录。但是字段的数量,我的意思是每个列表的长度是未知的,由用户决定。当您有一些学生信息时,您可以为该学生创建一个列表,并将其添加到外部列表中。在此之前,不需要有任何空的内部列表。首先,我需要将其创建为空。把它想象成在数据库中创建一个包含一些列的表。即使我没有任何信息,根据这个定义,我应该能够创建一个列表,在收到一些信息后将填充该列表。@RSahu所说的是,一个带有指向nil的键的列表和一个没有这些键的列表之间没有区别。谢谢!有没有不使用的方法?我不允许使用它。编辑了我的帖子。希望这能回答你的问题。