首页 > 解决方案 > 如何在函数中调用函数来获取列表的价格?

问题描述

我是方案新手,我正在尝试创建一个函数,该函数使用另一个函数来获取列表的价格。我有清单:

(define-struct store(id desc price))
(define master (list
   (make-store 1 'milk 2.50)
   (make-store 2 'meat 3.29)
   (make-store 3 'eggs 1.99)
   (make-store 4 'cereal 2.99)
   (make-store 5 'bread 2.79)
   (make-store 6 'soda 1.29)
   (make-store 7 'water 4.99)))

以及在该列表中查找元素的功能:

(define (lookup lst id)
  (cond ((null? lst) #f)
        ((= (store-id (car lst)) id)
         (list (store-id (car lst))
               (store-desc (car lst))
               (store-price (car lst))))
        (else (lookup (cdr lst) id))))

我将如何在另一个函数中调用此函数以单独打印价格?我认为如果不修改查找功能就不能这样做,我错了吗?有人可以帮我完成这个吗?

标签: schemeracket

解决方案


当您可以返回对象时,为什么还要改变返回列表的方式:

(define (lookup lst id)
  (cond ((null? lst) #f)
        ((= (store-id (car lst)) id) (car lst))
        (else (lookup (cdr lst) id))))

Astore是一个实际的销售项目,所以我猜这个名字有点不对劲。在函数中,您可以通过以下方式获取价格:

(define (product-price id)
  (let ((item (lookup master id)))
    (and item (store-price item))))

如果找不到 id,这也将返回#f。如果您确定它存在(或希望它在不存在时失败),您可以这样做:

(store-price (lookup master id))

推荐阅读