SICP 鍛鍊 (1 40)解決摘要

2021-09-07 01:51:29 字數 1384 閱讀 3463

sicp 鍛鍊1.40 是乙個休閒的工作非常easy,但它看起來很複雜,單的一道題。

題目原題例如以下:

請定義乙個過程cubic, 它和newtons-method過程一起使用在以下形式的表示式裡:

(newtons-method (cubic a b c) 1)
能逼進三次方程

的零點。

題幹是非常easy,就要求我們做個cubic過程,只是裡面涉及newtons-method和三次方程的零點,假設僅僅看題目的話真不知道從**下手。

要完畢這道題,先得回去把書中得newtons-method過一遍,書中的newtons-method定義例如以下:

(define (newtons-method g guess)

(fixed-point (newton-transform g) guess))

事實上就是求newton-transform的不動點。

那麼這個newton-transform,就是牛頓變換又是什麼呢?

書中的newton-transform定義例如以下:

(define (newton-transform g)

(lambda (x)

(- x (/ (g x) ((deriv g) x)))))

它的作用就是得出f(x),使f(x)例如以下:

f(x)= x - g(x) / dg(x)

如書中1.3.4節介紹牛頓法時描寫敘述的:

假設x-> g(x)是乙個可微函式,那麼方程g(x)=0 的乙個解就是函式x->f(x)的乙個不動點。當中f(x)= x - g(x) / dg(x)

好,回到我們的題目,我們有乙個函式

我們要逼進函式g(x)的零點,就是求g(x)=0的乙個解。

按以上的描寫敘述,就是我們要求(newtons-method 1)。注意這裡不是乙個合法的scheme語句。

這裡的g(x)就是我們要做的cubic過程的返回值。

問題到了這裡就變得非常easy了,只是是用cubic過程去生成乙個表示三次方程的lambda過程而已,cubic過程定義例如以下:

(define (cubic a b c) 

(lambda (x)

(+ (* x x x) (* a x x) (* b x) c)))

是不是結果有點出乎意料的簡單呢?

網摘 GTK中文顯示解決方案

來自 在gtk 中,必須使用utf 8的編碼來顯示中文。但我們平時在國內使用的是gb碼。所以,由於編碼不同會造成中文亂碼的。解決的關鍵就是將中文轉換成utf 8再傳給gtk顯示就可以了。gtk 提供了乙個函式g locale to utf8 這個函式是gtk將系統預設編碼轉換成utf 8的乙個函式。...

網摘 GTK中文顯示解決方案

來自 在gtk 中,必須使用utf 8的編碼來顯示中文。但我們平時在國內使用的是gb碼。所以,由於編碼不同會造成中文亂碼的。解決的關鍵就是將中文轉換成utf 8再傳給gtk顯示就可以了。gtk 提供了乙個函式g locale to utf8 這個函式是gtk將系統預設編碼轉換成utf 8的乙個函式。...

畢向東講解(摘) 12 執行緒通訊,解決安全問題

解決上面的執行緒間通訊時再次加深執行緒加鎖的兩個必須注意的條件 1.如果兩個執行緒操作的是同乙個資源就要加鎖 2.兩個執行緒的鎖,必須保證是同乙個鎖 packageday7 多執行緒,執行緒間通訊示例 對test 中線程間通訊出現的問題進行解決 加鎖 1.保證操作同乙個資源的 全部加鎖 2.保證加的...