2011-11-30 23 views
1

我想從使用lisp的用戶輸入中讀取2個值。我想將這些變量存儲起來,以便在程序中使用它們。Lisp - 從輸入讀取和存儲2個值

到目前爲止,我有當前代碼:

(defun le-posicao() 
    (let ((n_anel) 
     (pos_anel)) 
    (princ "?") 
    (setf n_anel (read)) 
    (setf pos_anel (read)) 
    (when (and (integerp (n_anel)) (integerp (pos_anel))) 
      n_anel pos_anel))) 

我使用let函數創建本地變量,然後我想我存儲從輸入他​​們讀出值。

我的問題是,我如何從輸入中讀取兩個值,並將第一個值存儲在一個變量中,將第二個值存儲在另一個變量中?值應該是以下格式:

? value1 value2 

有人可以幫助我嗎?

回答

1

你正在努力嘗試使用Lisp。雖然這是可能的,但可能會有點痛苦。

爲了使您的代碼更具功能性,而不是創建變量並對它們進行變異,您應該創建名稱並將值綁定到它們。

澄清,let是一種特殊的形式,而不是一個功能;它們用於創建名稱與值的詞彙範圍綁定。

我相信你真正想要做的是:

(let ((n_anel (read)) 
     (pos_anel (read))) 
    (... code using but not modifying n_anel and pos_anel ...)) 

此代碼避免setf


注:

不知道關於共Lisp的let括號 - 我一直在使用Clojure的最近!

還不確定您是否正確使用read

+0

使用這種方法,我只能夠讀取輸入中的最後一個值。我想將第一個值存儲在n_anel變量中,第二個值存儲在pos_anel中。 –

+0

問題是我沒有返回兩個值的列表,所以我只能看到最後一個。現在解決了,非常感謝。 –

+0

你應該使用'let *'而不是'let'。 'let'並行執行 綁定,'let *'按順序執行它們。 – Daimrod