【问题标题】:Lisp Function InterpretationLisp 函数解释
【发布时间】:2014-05-20 04:07:37
【问题描述】:

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

(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呢?它是否也返回此变量?任何总结都会有所帮助。谢谢

【问题讨论】:

  • 代码格式不正确,因此难以阅读。
  • 它直接出自书本
  • 好的,我修正了代码格式;你应该在复制/粘贴之前在 emacs 中缩进它。
  • “专业自动交易:Eugene A. Durenard 的理论与实践”

标签: lisp common-lisp


【解决方案1】:

这是一个泛型函数的方法,专门处理 order、simul 和 marketupdate 类型的参数。

它返回 2 values:

  1. 由同名函数 list 创建的长度为 1 的 list,其中包含单个对象,可能类型为 trade(可能 - 但不一定 - 由 defstruct) 创建,它具有插槽 timestamp、price 和 quantity。

  2. 符号nil。

您可以可能使用函数trade-timestamp &c 访问trade 的插槽(除非defstruct 形式不平凡或trade 不是由defstruct 定义的完全)。

【讨论】:

  • 这本书是“专业自动交易:Eugene A. Durenard 的理论与实践”。是的,它使用TRADE 的结构。
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-25
      • 2011-09-14
      • 1970-01-01
      • 2018-08-13
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      • 2021-01-13
      相关资源
      最近更新 更多