首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Lisp函数解释

Lisp函数解释
EN

Stack Overflow用户
提问于 2014-05-20 04:07:37
回答 3查看 141关注 0票数 0

我正在读一本书,我对以下代码的作用感到困惑:

代码语言:javascript
运行
复制
(defmethod execute ((o ORDER) (l SIMUL) (e MARKETUPDATE))
  (values
    (list (make-TRADE :timestamp (timestamp e)
                      :price (price e)
                      :quantity (orderquantity o)))
    NIL))

我得到这个函数的源说它返回两个值。我的问题是身体是做什么的。据我理解,第3-5行创建了一个包含:timestamp:price:quantity的列表。我说的对吗?第二行values呢?它也返回这个变量吗?任何总结都会有帮助。谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-20 04:31:26

这是一个泛型函数的方法,专门处理ordersimulmarketupdate类型的参数。

它返回2 values

  1. 由同名函数list创建的长度为1的list,该函数包含一个trade类型的对象(可能(但不一定是由defstruct创建),该对象具有时隙timestamppricequantity
  2. 符号nil.

您可能可以使用函数trade &c ( trade-timestamp &c)访问defstruct的插槽(除非defstruct表单不是平凡的,或者trade根本不是由defstruct定义的)。

票数 2
EN

Stack Overflow用户

发布于 2014-05-20 13:04:00

如果没有更多的上下文,为什么make的结果被包装在列表中是很难猜测的,但我猜想在某些情况下执行可以被拆分为N个交易。

我怀疑你的困惑几乎是完整的,因为这是你第一次遇到价值观的使用。通用Lisp允许函数返回多个值。这与任何语言允许函数接收多个参数的方式略有相似。

这些多个返回值非常有效地实现。大多数新手第一次在整数除法函数上遇到多个值,这将返回一个余数作为他们的第二个值。哈希表查找将返回第二个值,以指示键是否实际在表中,因为为该键存储的值可能为零。

在您的示例中,第二个值为零,其他执行方法可能会返回更有趣的内容--例如,在更新Q中,订单位于何处,如果发生错误,则返回错误代码。当然,检查手册的价值观将充满教育价值(原文如此)。

票数 0
EN

Stack Overflow用户

发布于 2014-05-21 05:08:52

此函数是通过使用关键字值返回两个值的方法。查看CLOS,以更好地理解面向对象和返回多个值的方法的“值”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23750854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档