2017-03-11 61 views
0

是否可以引用函數調用的結果?方案:如何引用函數調用的結果?

例如

(quoteresult (+ 1 1)) => '2

+0

雖然這是一個非常基本的問題,但很難谷歌任何方案的學習材料。 –

+0

[計算機程序的結構和解釋](https://mitpress.mit.edu/sicp/),[如何設計程序](http://www.htdp.org)。 – molbdnilo

回答

2

乍一看,你的問題並沒有真正使任何意義。 「引用」是一種可以在源代碼片段的基準上執行的功能。 「引用」運行時間值最多是空操作,最糟糕的是無意義。

你的問題中的例子說明了爲什麼它沒有任何意義。您所謂的quoteresult表單將評估(+ 1 1)以生成'2,但'2評估爲2(+ 1 1)評估的結果與此相同。 quoteresult的結果與普通評估有什麼不同?

但是,如果要真正地產生quote表達將被切換到一些使用動態評價(與通常的免責聲明that is probably a bad idea),那麼你只需要生成兩個元素的列表:符號quote和你的函數的結果。如果是這樣的話,你可以實現quoteresult很簡單:

(define (quoteresult x) 
    (list 'quote x)) 

這一點,但是,對於大多數程序用處不大。

有關報價是什麼以及工作原理的更多信息,請參閱What is the difference between quote and list?

+0

我需要引用結果,因爲我正在構建基於輸入的計劃程序的引用表示。一旦建成,我將對其進行評估。在這之前,我必須引用裏面的每個列表來確保eval函數不會試圖將列表頭部應用到其尾部。 –

+0

@FordO。所以你說你想要結果是* list *'(quote 2)'?也就是說,評估表達式'(list'quote 2)''的結果? –

+0

@FordO。爲什麼你首先評估表格?如果你不知道怎麼做'quoteresult',我想你可以跳過評估他們呢? – Sylwester