【发布时间】:2015-06-22 02:02:38
【问题描述】:
我对我的程序在方案中遇到的两个未绑定变量错误有疑问:';Unbound variable: temp' 和 ';Unbound variable: record'。
我最终尝试创建一个排序函数,按 ID 升序对我的名册(学生信息列表,每个元素是一个子列表)进行排序。 roster 的每个子列表包含 3 个元素:ID 号(数字字符串)、名称(字符字符串)和等级(int)作为自己的列表。 ID 号是 roster 中每个子列表的第一个元素。目前我正在制作一个“最小”辅助函数来返回名册中所有子列表的最小 ID 号(作为记录)。
快速旁注:我不允许使用任何套装!函数或 do-loops,或任何内置的排序函数。
我目前“最小”的目标是将名册附加到局部变量“temp”,因为我不希望名册在从函数返回时发生变化。在执行此操作之前,我必须先获取我的“未绑定变量:记录”,然后我尝试将记录定义为 int,然后再使用此代码将其传递给我的“最小”函数:
((= n 3)
(begin
(display "\n\tOption 3.")
(display "\nDisplay Roster by ID")
(display "\nsmallest record is: ")
(lambda (record) (* record record) 100)
(smallest roster record)
(menu roster)))
(define smallest
(lambda (roster record)
((append roster temp)
(cond ((or (null? temp) (equals (length(temp)) 1)) record)
((< (car(car temp)) (car(car(cdr temp))))
(if (or (null? record) (> record (car(car temp))))
(cons (car(car temp)) record)
record)
(smallest (cdr temp) record))
(else (smallest (cdr temp) record))))))
【问题讨论】:
-
一般情况下,如果您发布图片的链接(例如,上传到 imgur),有足够代表的人会为您发布。
-
(lambda (record) (* record record) 100)是一个未命名的函数,它对一个数字求平方,将其丢弃,然后返回 100。你永远不会将它用于任何事情。并且(append roster temp)和(cons (car(car temp)) record)创建 new 列表 - 没有任何内容被修改(或者如果存在名为“temp”的东西,则不会创建它们)。看起来您已经熟悉其他语言了;如果你假装不是,从头开始学习,学习 Scheme 会更容易。
标签: list sorting variables scheme