2012-02-28 35 views
13

Tôi chỉ cố gắng để làm mã rất đơn giản với set-car!set-cdr! trong racket, nhưng tôi đã nhận lỗi: expand: unbound identifier in module in: set-car!expand: unbound identifier in module in: set-cdr!set-car !, set-cdr! unbound trong vợt?

Không phải họ quy định tại racket? Bất cứ ai có thể giúp đỡ?

+0

Bạn chọn ngôn ngữ nào? Đặt ngôn ngữ thành R5RS. –

+0

Tôi có '#lang racket' ngay từ đầu, khi tôi đặt' #lang R5RS', nó cho tôi một lỗi: 'Mô-đun Ngôn ngữ: mô-đun không hợp lệ tiêu chuẩn mô-đun-tên-resolver: bộ sưu tập không tìm thấy: # trong bất kỳ: (# # ) ' – SoftTimur

+6

Sử dụng' #lang r5rs' - - chữ thường. (Nhưng bằng cách sử dụng ngôn ngữ r5rs sẽ không làm cho một trải nghiệm thú vị.) –

Trả lời

20

Bạn cần phải nhập khẩu mutable-pairs-6, như thế này:

(require rnrs/mutable-pairs-6) 

Những thủ tục đã được chuyển đến một mô-đun khác nhau và đổi tên thành mcons, mcar, mcdr, set-mcar!, set-mcdr!, mlist nhấn mạnh rằng họ hoạt động trên dữ liệu có thể thay đổi , không giống như các đối tác bất biến của họ.

+0

Cảm ơn bạn đã bình luận của bạn ... những gì về 'cadr'? có vẻ như 'mcadr' không tồn tại ... – SoftTimur

+0

Đáng buồn là các thủ tục đó (' mcadr', 'mcdar', v.v.) không tồn tại, bạn sẽ phải thực hiện chức năng của chúng bằng tay –

+3

Xác định chính nó! '(định nghĩa mcadr (soạn mcarr mcdr))' –

12

Câu trả lời của Óscar López là chính xác, nhưng không giải thích tại sao các cặp thông thường là không thay đổi.

Trong vợt (và tiền thân của nó, Sơ đồ PLT, kể từ phiên bản 4), các ô khuyết điểm là không thay đổi theo mặc định. Hầu hết các chương trình Đề án không bao giờ cần phải sửa đổi các tế bào khuyết điểm, và có được chúng không thay đổi cho phép tối ưu hóa nhiều. (Ví dụ: list?length đều có thể là thời gian không đổi.)

Đối với trường hợp cần có khả năng thay đổi, có nhiều thứ (như đã đề cập) và hữu ích hơn, có hộp.

+6

[Tham chiếu bắt buộc tại đây.] (Http://blog.racket-lang.org/2007/11/getting-rid-of-set-car-and-set-cdr.html) –

2

This article cho chúng tôi biết lý do chúng bị xóa khỏi Racket

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