Lisp函数解释

时间:2014-05-20 04:07:38

标签: lisp common-lisp

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

(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,第二行怎么样?它也会返回这个变量吗?任何摘要都会有帮助。感谢

3 个答案:

答案 0 :(得分:2)

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

它返回2 values

  1. 长度为1的list由同名函数list创建,其中包含单个对象,大概是,类型为trade(< em>可能 - 但不一定 - 由defstruct创建),其中包含广告位timestamppricequantity

  2. 符号nil

  3. 您可以 使用函数trade&amp; c访问trade-timestamp的广告位(除非defstruct表格不重要或{{1根本没有trade定义。

答案 1 :(得分:0)

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

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

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

在您的示例中,第二个值是NIL,可能其他执行方法可能会返回更有趣的内容 - 例如,在更新Q中,订单是放置的位置,或者如果出现错误则是错误代码。当然,查看手册中的价值观将充满教育价值(原文如此)。

答案 2 :(得分:0)

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