我正在尝试编写一个函数,该函数需要一个结构列表,并使用每个结构的属性之一创建一个新列表。
我已经成功编写了一个类似的函数,该函数接受一个列表并返回一个包含每个项目的新函数
这是我目前拥有的功能
(define makelist
(lambda (items part)
(if (null? (cdr items)) (invItem-id (car items))
(cons (invItem-id (car items)) (makelist ((cdr items) part))))))
我知道该部件不执行任何操作,但是我计划向该函数添加一个cond来检查传递了什么部件,以便它知道要获取的属性。稍后,我使用此函数传递一个已定义的列表,称为“库存”
(makelist (inventory "id"))
运行后出现此错误
application: not a procedure;
expected a procedure that can be applied to arguments
given: (#<invItem> #<invItem> #<invItem> #<invItem> #<invItem> #<invItem> #<invItem>)
arguments...:
尽管我希望可以得到一个包含清单中每个invItem的ID的新列表。像(1 2 3 4 5 6。7)
答案 0 :(得分:1)
(makelist ((cdr items) part))
应该是(makelist (cdr items) part)
。
另外if (null? (cdr items)) (invItem-id (car items))
应该是if (null? items) '()
,以便结果始终是正确的列表。
我建议使用(map invItem-id items)