2014-05-20 79 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以更好地理解面向對象和返回多個值的方式的「值」。