2008-10-15 23 views
6

REBOL không có cách tích hợp để thực hiện việc hiểu danh sách. Tuy nhiên, REBOL có một cơ sở mạnh mẽ (được gọi là parse) có thể được sử dụng để tạo các ngôn ngữ cụ thể cho miền (DSL). Tôi đã sử dụng parse để tạo một DSL nhỏ như vậy để hiểu danh sách. Để diễn giải biểu thức, khối chứa hiểu được chuyển đến hàm, vì thiếu cụm từ tốt hơn tôi gọi là comprehend.Tôi nên gọi hàm REBOL nào để thực hiện tính năng hiểu danh sách?

Ví dụ:

comprehend [(a * b) for a in 1x100 for b in 4x10 where (all [odd? a odd? b])] 

Đối với một số lý do, comprehend âm thanh không đúng với tôi, nhưng cái gì đó như eval là quá chung chung.

Tôi chưa tìm thấy bất kỳ ngôn ngữ nào khác yêu cầu từ khóa hoặc chức năng để hiểu danh sách. Chúng là đường cú pháp thuần túy ở bất cứ nơi nào chúng tồn tại. Thật không may tôi không có tùy chọn đó. Vì vậy, thấy rằng tôi phải có một chức năng, một tên tốt, ngắn gọn, hợp lý cho nó là gì?

+1

Dưới đây là các mã nguồn cho hiểu danh sách: http://blog.revolucent.net/2009/04/dirt-simple-dsl-in-rebol.html –

Trả lời

4

Làm thế nào về select?

select [(a * b) for a in 1x100 for b in 4x10 where (all [odd? a odd? b])]

+2

Rebol đã có một 'select' và điều quan trọng. Không phải tên này. – BrianH

2

Vì việc hiểu danh sách có thể được coi là tương tự như bản đồ, bạn có thể nghĩ đến việc gọi nó là một cái gì đó như "listmap". Thay vào đó, bởi vì việc hiểu danh sách dựa trên ký pháp thiết lập, bạn có thể gọi nó là một cái gì đó dọc theo dòng "build" hoặc "buildlist".

(Disclaimer: Tôi biết rất ít về REBOL, vì vậy tha thứ cho tôi nếu các tên này đã được thực hiện)

1

do có thể là thích hợp, dạng danh sách comprehensions chỉ là một ví dụ của comprehensions Monad, và do là từ khóa được sử dụng trong Haskell cho tính toán monadic sugared nhưng tôi nghi ngờ nó quá mơ hồ cho một thư viện người dùng. Tôi gọi hàm list comprehension của tôi là comp, nhưng đó chỉ là một từ viết tắt của những gì bạn đã có. Có lẽ yielding? Ví dụ. yielding [(a * b) for a in 1x100 for b in 4x10 where (all [odd? a odd? b])]. Chỉ cần nheo mắt và giả vờ [] không có ở đó.

+0

Thật không may DO đã là một từ REBOL. –

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