2012-07-04 24 views
7

Bài tập 1.5. Ben Bitdiddle đã phát minh ra một thử nghiệm để xác định xem liệu thông dịch viên mà anh ta đang phải đối mặt có đang sử dụng đánh giá theo đơn đặt hàng hoặc đánh giá thông thường. Ông xác định sau hai thủ tục:Bài tập SICP 1.5

(define (p) (p))

(xác định (kiểm tra xy) (if (= x 0) y))

Sau đó, ông đánh giá biểu thức

(thử nghiệm 0 (p))

hành vi gì Ben sẽ quan sát với một thông dịch viên có sử dụng đánh giá applicative đặt hàng? Anh ta sẽ quan sát hành vi nào với thông dịch viên sử dụng đánh giá theo thứ tự bình thường?

Tôi hiểu câu trả lời cho bài tập; câu hỏi của tôi nằm ở cách (p) được diễn giải so với p. Ví dụ, (test 0 (p)) làm cho thông dịch viên bị treo (dự kiến), nhưng (test 0 p) với định nghĩa trên ngay lập tức đánh giá là 0. Tại sao?

Hơn nữa, giả sử chúng tôi đã thay đổi định nghĩa thành (define (p) p). Với định nghĩa đã cho, (kiểm tra 0 (p)) và (kiểm tra 0 p) cả hai đánh giá là 0. Tại sao điều này xảy ra? Tại sao người phiên dịch không treo? Tôi đang sử dụng Dr Racket với gói SICP.

Trả lời

15

p là một hàm. (p) là cuộc gọi đến một hàm.

Trong thông dịch viên của bạn, hãy đánh giá p.

p <Return> 
==> P : #function 

Bây giờ đánh giá (p). Hãy chắc chắn rằng bạn biết làm thế nào để giết thông dịch viên của bạn! (Có lẽ có một ” nút “ Dừng ở TS vợt.)

(p) 

Lưu ý rằng không có gì xảy ra. Hoặc, ít nhất, không có gì nhìn thấy được. Trình thông dịch đang quay đi, loại bỏ các cuộc gọi đuôi (vì vậy, sử dụng gần 0 bộ nhớ), gọi p.

p(p) đánh giá những thứ khác nhau, bạn nên mong đợi hành vi khác nhau.

Đối với câu hỏi thứ hai: Bạn đang xác định p là một hàm tự trả về. Một lần nữa, hãy thử đánh giá p(p) bằng số (define (p) p) của bạn và xem những gì bạn nhận được. Đoán của tôi (Tôi đang sử dụng một máy tính mà trên đó tôi không thể cài đặt bất cứ thứ gì và không có sơ đồ) là chúng sẽ đánh giá cùng một thứ. (Tôi thậm chí có thể đặt cược rằng (eq? p (p)) sẽ đánh giá là #t.)

+0

+1 câu trả lời ngắn gọn. Ngoài ra, hãy thử http://codepad.org. –

+0

Cảm ơn. Tôi cũng đang tìm câu trả lời. – user1166240