2009-06-02 35 views
6
> (eq? 1 1) 
    #t 
    > (eq? 1.1 1.1) 
    #f 
    > (= 1.1 1.1) 
    #t 

Đây là cửa sổ tương tác trong DrScheme. Ai đó có thể xin giải thích sự khác biệt giữa = và eq? trong Đề án?Sự khác biệt giữa eq? và = trong Đề án?

+4

câu hỏi thú vị hơn là sự khác biệt giữa 'eq?', 'Equal? ​​', Và' eqv? ' – newacct

Trả lời

9

= so sánh các số. eq? kiểm tra nếu các tham số đại diện cho cùng một đối tượng dữ liệu trong bộ nhớ. eqv? nên làm việc trong trường hợp thứ hai vì nó kiểm tra giống như eq? nhưng kiểm tra nguyên thủy đặc biệt. More on equlivence predicates in scheme here.

1

khác biệt đầu tiên: eq? hoạt động với bất kỳ cặp giá trị nào, trong khi = hoạt động với bất kỳ số lượng nào.

có một số khác equivalence predicates. Hầu hết trong số họ chỉ chấp nhận chính xác hai tham số. = được xác định trong các số 'numbers' chapter

3

tôi sẽ đoán rằng kể từ khi

eq? đánh giá thành #f trừ khi tham số đại diện cho cùng một dữ liệu đối tượng trong bộ nhớ;

cửa hàng Đề án số không chính xác (1.1) khác so với con số chính xác (1)

Hai 1.1 đối số không cư trú tại cùng một vị trí trong bộ nhớ và quay trở lại # f cho eq?

Wikipedia Reference

3

eq? về số là không thể đoán trước. Đó là vào việc thực hiện hay không cho dù chữ số được interred để các con số tương tự là trong cùng một vị trí trong bộ nhớ. Ví dụ, ngôn ngữ Racket gần đây đã chọn để thực tập các tác phẩm như vậy trong quá trình đọc. http://www.mail-archive.com/[email protected]/msg04893.html

Bạn sẽ không biết chắc liệu thời gian chạy của triển khai ngôn ngữ của bạn có đại diện cho mỗi số duy nhất hay không. Điều này có thể ảnh hưởng đến các giá trị được đóng hộp, như nổi và bignums. Đó là lý do tại sao = tồn tại dưới dạng vị từ cho các số: nó kiểm tra mức độ bằng nhau của nội dung chứ không phải là bình đẳng con trỏ nông.

Điều này không dành riêng cho các ngôn ngữ như Đề án: bình đẳng so với độ tương đương xảy ra trong Python ( so với ==) chẳng hạn.

Các vấn đề liên quan