scheme - 如何在函数中调用函数来获取列表的价格?
问题描述
我是方案新手,我正在尝试创建一个函数,该函数使用另一个函数来获取列表的价格。我有清单:
(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))))
我将如何在另一个函数中调用此函数以单独打印价格?我认为如果不修改查找功能就不能这样做,我错了吗?有人可以帮我完成这个吗?
解决方案
当您可以返回对象时,为什么还要改变返回列表的方式:
(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))
推荐阅读
- sql - 如何优化这个 UNION SQL 查询?
- vb.net - 按下 TAB 键时关注 WebBrowser 控件的问题
- shell - GETOPTS 命令在我的 shell 脚本中不起作用
- android - Android(清单) - 在后台而不是发件人中的应用程序中打开意图
- android - Multiuserchat InvitationListener Smack:4.1.0 没有被调用
- git - Git:如何将分支的历史保存到单个文件中
- c++ - 如何以铿锵格式强制东部常量?
- amazon-web-services - 如何默认域使用 HTTPS
- git - 在 Github 上,问题和拉取请求之间是否存在强制关系?
- ruby-on-rails - 为 Rails 应用程序安装 postgresql 时遇到问题