函数返回“应用程序不是过程”错误,而不是新列表

时间:2019-10-03 21:19:44

标签: scheme

我正在尝试编写一个函数,该函数需要一个结构列表,并使用每个结构的属性之一创建一个新列表。

我已经成功编写了一个类似的函数,该函数接受一个列表并返回一个包含每个项目的新函数

这是我目前拥有的功能

(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)

1 个答案:

答案 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)