2010-10-13 17 views
6

什麼是Lisp中的一個有條件的例子?請解釋代碼。什麼是Lisp中的一種有條件的示例?

+1

我只熟悉術語「照應」,因爲它涉及到自然語言 - 例如,代詞可以被認爲是對前面提到的名詞的指代。 「John是一名程序員,他爲Google工作。」在這個例子中,「他」是對「約翰」的指代。所以我認爲你需要解釋在Lisp編程的背景下什麼是「指代性條件」 - 這不是一個常用術語。 – 2010-10-13 01:42:58

+0

** @ Jim_Lewis:**下面是在Lisp編程環境中,「條件反射」的含義:http://weblogs.java.net/blog/2006/06/29/more-literate-programming-language- level-annaphora – blunders 2010-10-13 01:52:06

+2

@Jim Lewis:不出所料,這就是指代宏時指代*指代的含義。查看我的回答鏈接和示例。 – 2010-10-13 01:55:47

回答

4

一個例子是Common Lisp的LOOP

(loop for item in list 
     when (general-predicate item) 
     collect it) 

可變IT具有測試表達式的值。這是ANSI Common Lisp LOOP設施的一項功能。

實施例:

(loop for s in '("sin" "Sin" "SIN") 
     when (find-symbol s) 
     collect it) 

返回

(SIN) 

因爲只有"SIN"爲現有符號,這裏的符號SIN的名稱。在默認情況下,Common Lisp符號名稱具有內部大寫名稱。

+0

** @ Rainer_Joswig:**哇,謝謝 - 這對我來說非常清楚。再次謝謝你!! – blunders 2010-10-13 12:05:27

+0

** @ Rainer_Joswig:**從您的經驗來看,學習LISP的最佳方式是什麼? – blunders 2010-10-13 12:07:31

9

Paul Graham的On Lisp有一章Anaphoric Macros

從本質上講,它是避免重複代碼的簡短寫法語句。例如,比較:

(let ((result (big-long-calculation))) 
    (if result 
     (foo result))) 

(if (big-long-calculation) 
    (foo it)) 

其中it是指無論在(big-long-calculation)剛剛計算出一個特別的名字。

+0

** @ Greg Hewgill:**謝謝,仍然有點迷失在Paul Graham的代碼中,但處理起來很有趣。 – blunders 2010-10-13 02:11:11

+2

@blunders:確實。除非你已經非常熟悉Lisp中不同類型的宏,否則宏觀起始宏可能不是最好的開始。關於Lisp是一個很棒的閱讀。 – 2010-10-13 02:19:41

+0

** @ Greg Hewgill:**同意。我已經掃描了幾本LISP書籍,主要是The Little Schemer等。 「有害條件」隨機出現在對這個問題的研究中:http://stackoverflow.com/questions/3920046/is-it-common-for-a-language-to-evalute-undefined-as-equal-to-假如果是爲什麼 - – blunders 2010-10-13 02:26:19

相關問題