2011-09-16 36 views
6

Tôi là học sinh Scheme/Racket mới, vì vậy hãy tha thứ cho bất kỳ lỗi cú pháp trắng trợn nào.Sơ đồ: Danh sách ba phần tử chấm chấm trở lại lạ (giống như một toán tử infix?)

Nó đã đưa ra trong lớp học ngày hôm nay rằng danh sách chương trình '(a, b, c) nên không có giá trị, nhưng khi chúng tôi chạy nó, nó trả về:

>'(a . b . c) 
(b a c) 

Mà làm cho không có ý nghĩa. Trong trường hợp này, trình thông dịch sẽ tạo một ô đối chiếu với ô tô 'a và cdr' b và 'c sẽ không hợp lệ. Điều đó nói rằng, thông dịch viên đang làm điều gì đó thật kỳ lạ ở đây. Điều này làm việc với sơ đồ #lang, vợt #lang và những thứ khác. Chúng tôi đang sử dụng DrRacket làm thông dịch viên.

Điều thú vị là,

>'(a . b . c . d) 

ném một ngoại lệ và chết.

Tôi rất tò mò và rất thích có thể hiểu điều này vì tôi mới sử dụng ngôn ngữ. Google đã rất vô ích (có lẽ vì cụm từ tìm kiếm không rõ ràng) Cảm ơn bạn!

EDIT: Có thể là do '(a . b . c) được diễn giải bằng b làm toán tử kết xuất. Ví dụ: >(4 . + . 6) trả về 10. Có lẽ thông dịch viên đang sử dụng b như một toán tử? tức là (b a c) như (+ 4 6), thông minh.

Expermentation nói:

>(define b +) 
>(define a 4) 
>(define c 6) 
>(a . b . c) 
10 

Vì vậy, tôi nghĩ rằng điều này giải quyết được vấn đề, nhưng tôi vẫn không hiểu đầy đủ việc sử dụng "" toán tử trong trường hợp này. Tôi nghĩ chúng tôi đã giải quyết vấn đề này, nhưng mọi thông tin chi tiết hơn sẽ được đánh giá cao!

+0

Các dấu chấm ở hai bên của toán tử nhắc tôi về Fortran: 1 .LT. 3 – JasonFruit

Trả lời

8

Câu trả lời ngắn gọn: bạn đã hiểu. Để biết thêm thông tin về việc sử dụng vợt cụ thể này, hãy xem tài liệu cho infix trong tài liệu Racket.

4

Đó là một tính năng đặc biệt của người đọc Racket. (Xem câu trả lời của John.)

Đối với các triển khai khác, thay vào đó bạn có thể sử dụng trình đọc readable S-expressions để có thể đọc biểu thức infix. Nó sử dụng dấu ngoặc nhọn. ví dụ: {3 + 4} được đọc ở dạng (+ 3 4). Thậm chí đặc biệt hơn (so với đầu đọc infix của vợt), bạn có thể sử dụng {3 + 4 + 5} hoặc {3 + 4 + 5 + 6}; họ sẽ đọc lần lượt là (+ 3 4 5)(+ 3 4 5 6).

+1

Xem thêm việc triển khai S-exps có thể đọc được đối với Racket: http://planet.racket-lang.org/display.ss?package=sweet.plt&owner=asumu –

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