2014-05-20 80 views
0

我正在读一本书,我在下面的代码做什么困惑: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,第二行呢?它是否也返回这个变量?任何总结都会有帮助。谢谢

+0

代码格式不正确,难以阅读。 – sds

+0

它字面上直接出来的书 – user1234440

+1

没关系,我修正了代码格式;你应该在复制/粘贴之前在emacs中缩进它。 – sds

回答

2

这是一种通用函数的方法,专门用于参数类型order,simulmarketupdate

它返回2 values

  1. 长度由同名函数list,其含有的一个对象创建1的list想必,类型trade大概 - 但不是必须 - 由defstruct创建),其具有时隙timestamppricequantity

  2. 符号nil

您可以大概访问的trade使用函数槽trade-timestamp & C(除非defstruct形式是非平凡或trade不是由defstruct在所有定义的)。

+0

该书是”专业自动交易:理论和实践由尤金A. Durenard“。是的,它使用'TRADE'结构。 –

0

为什么要交易的结果被包裹在一个列表是很难没有更多的上下文猜测,但我猜的执行可以分成在某些情景下氮素交易。

我怀疑你产生了困惑几乎全部,因为这是你遇到了使用价值的第一次。 Common Lisp允许函数返回多个值。这与任何语言如何允许函数接收多个参数都很相似。

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

在您的例子第二个值是NIL,想必其他执行方法可能会返回一些更有趣的 - 例如当在更新Q中的顺序为地方,或一个错误代码,如果出现错误。当然,检查手册的价值将充满教育价值(原文如此)。

0

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