Tôi thường sử dụng cấu trúc phù hợp với mẫu củavà tôi đã nghĩ cách tự sửa lỗi chương trình bằng cách sử dụng match
và tìm hiểu cách macro Racket/Scheme hoạt động. thông tin giống như mẫu nào được khớp.Số tăng dần trong Định nghĩa Macro
Nói cách khác, tôi đang tìm cách để tạo ra một macro, đưa ra này:
(match/debug 'two
['one 1]
['two 2])
Đầu ra một cái gì đó như thế này:
Case 2 <-- Printed
2 <-- Returned value
Trở ngại chính cho đến nay đã cố gắng để có được các con số biểu thị trường hợp được giải quyết để hiển thị chính xác.
mục tiêu của tôi là cố gắng viết một cái gì đó mà sẽ mở rộng như thế này:
(match 'two
['one (displayln "Case 1") 1]
['two (displayln "Case 2") 2])
Nhưng tôi đã không thể tìm ra cách nào để tạo ra những "Case #" chuỗi.
Dưới đây là định nghĩa cố vĩ mô của tôi:
(define-syntax-rule (match/debug id [pattern value] ...)
(let ([index 0])
(match id
[(begin
(set! index (add1 index))
pattern)
(printf "Case ~a\n" index)
value] ...)))
Có vẻ như cú pháp của match
sẽ không cho phép tôi làm điều gì đó như thế này, nhưng đây là cách duy nhất tôi có thể nghĩ đến. Tôi chỉ thực sự quen với kiểu macro của Common Lisp.
Funnily đủ ... Tôi thực sự đã kết thúc bằng cách sử dụng mô hình trích dẫn, nó đã cho tôi đủ thông tin. Nhưng cảm ơn vì phản ứng nhanh chóng và kỹ lưỡng! – mellowmaroon