nếu tôi có một cái gì đó như thế này (define s (hi,there))
thì làm sao tôi có thể viết trong trận đấu như (match s [(,h , ,t)] ...)
Nhưng nó không làm việc, bởi vì match
cần ,
vậy làm thế nào tôi có thể làm điều này?Làm thế nào để phù hợp, trong trận đấu trong Racket?
Trả lời
Lưu ý đầu tiên rằng dấu phẩy ,
là từ viết tắt của trình đọc đặc biệt. (hi,there)
được đọc là (hi (unquote there))
. Đây là khó phát hiện - vì danh sách in máy in mặc định là có phần tử đầu tiên là unquote
theo cách đặc biệt.
Welcome to DrRacket, version 5.3.0.14--2012-07-24(f8f24ff2/d) [3m].
Language: racket.
> (list 'hi (list 'unquote 'there))
'(hi ,there)
Vì vậy, mẫu bạn cần là '(danh sách h (danh sách' unquote t)) '.
> (define s '(hi,there))
> (match s [(list h (list 'unquote t)) (list h t)])
(list 'hi 'there)
Sử dụng một dấu chéo ngược nếu bạn muốn sử dụng dấu phẩy như một biểu tượng bên trong của một phần trích dẫn:
> (define s '(hi \, there))
> (match s [(list h c t) (symbol->string c)])
","
Và sử dụng '|,|
cho biểu tượng dấu phẩy độc lập.
> (match s [(list h '|,| t) (list h t)])
'(hi there)
Trong cả hai trường hợp, bạn thực sự nên sử dụng khoảng trắng để phân tách mọi thứ và sử dụng danh sách.
(define s (hi,there))
không phải là Racket hợp lệ.
Lý do có dấu phẩy bên trong là tệp tôi đang phân tích cú pháp sử dụng nó để phân tách nhiều thứ và tôi muốn sử dụng đối sánh Racket để phân tích tệp (thực sự quan tâm hơn khi tôi tìm thấy dấu phẩy là rất đặc biệt trong vợt!) Nhưng cảm ơn cho câu trả lời từ các bạn) –
Tôi nghĩ bạn có thể nhầm lẫn về nơi bạn cần dấu phẩy. Trong Racket, bạn không sử dụng dấu phẩy để phân tách các phần tử trong một danh sách. Thay vào đó, bạn chỉ cần sử dụng khoảng trắng. Hãy cho tôi biết nếu điều này là sai, nhưng những gì tôi tưởng tượng là bạn đang cố gắng để phù hợp với một biểu thức như (define s '(hi there))
. Để làm điều đó, bạn sẽ sử dụng
(match s
[`(,h ,t) ...])
Sau đó, trong khu vực nơi elipses là, biến h
có giá trị 'hi
, và biến t
có giá trị 'there
Tôi chỉ muốn tận dụng lợi thế của 'match' trong Racket để phân tích định dạng s-biểu hiện giống như VỚI COMMA bên trong dấu ngoặc đơn. –
- 1. Làm thế nào để Phù hợp với Regex "trận đấu ngắn nhất" trong .NET
- 2. RegEx: Trận đấu nhỏ nhất hoặc trận đấu không phù hợp
- 3. số trận đấu trận đấu trận đấu
- 4. Làm thế nào để có được tổng số trận đấu trong Solr/lucene
- 5. Regex: từ trận đấu trong câu PHP
- 6. Làm thế nào để có được vị trí của một trận đấu Regex trong một chuỗi?
- 7. python trận đấu regex và thay thế
- 8. Trùng khớp các trận đấu trong Regex
- 9. Trận đấu mờ trong C#
- 10. Làm cách nào để viết một trận đấu không tham lam trong LEX/FLEX?
- 11. CMake regex trận đấu trong danh sách
- 12. Trận đấu ngày Hamcrest
- 13. Powershell: nhà điều hành trận đấu trả về true nhưng $ phù hợp là null
- 14. Javascript: Làm thế nào để có được nhiều trận đấu trong kết quả RegEx .exec
- 15. Làm thế nào để xác định một hiệp hội đa hình trong một trận đấu
- 16. Làm thế nào để chỉ chọn một phần nhất định trong một trận đấu?
- 17. Làm thế nào để thực hiện các trận đấu bắt đầu một phần trong Solr?
- 18. Làm thế nào để bỏ qua dấu trọng âm trong một trận đấu regex javascript?
- 19. trận đấu haproxy điều kiện khác nhau trong use_backend
- 20. Xóa đến cuối dòng sau một trận đấu, giữ dòng không phù hợp
- 21. Cụm từ thông dụng - Cách tìm một trận đấu trong một trận đấu?
- 22. Làm thế nào để bạn mã hóa một khối mã mẫu phù hợp trong scala?
- 23. Android/Java regex trận đấu Thêm ký
- 24. Scala - trường hợp trận đấu một phần chuỗi
- 25. Làm thế nào tôi có thể làm cho trận đấu của tôi không tham lam trong vim?
- 26. trận đấu, chữ nhỏ bởi RegExp
- 27. Đếm số trận đấu
- 28. Python regex trận đấu đen dấu
- 29. tương đương trăn (hoặc numpy) của trận đấu trong R
- 30. Javascript thay thế nhóm phù hợp
Hãy tha thứ cho những nhận xét không mong muốn, nhưng nó xuất hiện với tôi rằng bằng cách sử dụng vợt 'phù hợp' để phân tích cú pháp đầu vào có chứa dấu phẩy có lẽ không phải là một ý tưởng tuyệt vời; trừ khi phần còn lại của đầu vào thực sự rất gần với vợt/LISP, điều này nghe có vẻ giống như một trường hợp để cắn viên đạn và sử dụng một trình phân tích cú pháp thực tế. Xin lỗi trước nếu tôi đã hiểu lầm trường hợp sử dụng của bạn. –
@JohnClements Tôi nghĩ bạn đúng .. và câu chuyện là chương trình chính của tôi được viết bằng Racket và tôi chỉ muốn lấy các cấu trúc dữ liệu được xây dựng từ phân tích cú pháp tệp trong Racket. Các tập tin gần như trông giống như S-Exp, sau đó cho đến khi rất muộn, tôi thấy có dấu phẩy ... –
Bạn có bất kỳ loại đặc điểm kỹ thuật cho những gì các hình thức có thể xảy ra trong tập tin nguồn? Tệp nguồn có được viết bằng một số ngôn ngữ nổi tiếng không? –