簡體   English   中英

表達式 ((lambda (x) (* x 2)) (+ 3 1)) 的計算順序?

[英]Evaluation order for the expression ((lambda (x) (* x 2)) (+ 3 1))?

一種

((lambda (x) (* x 2)) (+ 3 1))
((lambda (x) (* x 2)) 4)
(* 4 2)
8

((lambda (x) (* x 2)) (+ 3 1))
(* (+ 3 1) 2)
(* 4 2)
8

我猜有2個版本。 但我不確定哪一個是正確的。

第二個使用 SICP 所說的替換。 這不是真正的 lisps 所做的,它在第 1 章中被描述為一個學習練習。一旦引入了像 let get 這樣的特殊形式,這將不起作用。

第一個使用應用順序,是像球拍這樣的真正方案實現。 它計算 lambda,然后計算以下表達式,然后將 lambda 產生的函數應用於計算結果 (+ 3 1)。

Gerald Sussman 是這樣解釋他使用替代模型的

如果我們要了解流程以及我們如何控制它們,那么我們必須從這個過程的機制到這些流程的行為方式進行映射。 我們將擁有的是一個正式的或半正式的機械模型,您可以從中了解機器實際上如何在原則上做到這一點。 真機是否真的做到了我要告訴你的,此刻完全無關緊要。

事實上,這是一個工程模型,就像[對於]電阻器,我們寫下一個模型 V = IR——它大約是真的,但它不是真的; 如果我通過電阻器施加足夠的電流,它會變得繁榮,因此電壓並不總是與電流成正比,但對於某些目的,該模型是合適的。

特別是,我們現在要描述的模型,我稱之為替代模型,是我們用來理解過程如何工作和過程如何工作的最簡單的模型——過程如何產生過程。

對於我們將在接下來的幾天內處理的大多數事情,該替代模型將是准確的。 但最終,將無法維持機器工作方式的錯覺,我們將轉向其他更具體和特定的模型,以顯示更多細節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM