6

REBOL には、リスト内包表記を実行する組み込みの方法がありません。しかし、REBOL には、parseドメイン固有言語 (DSL) を作成するために使用できる強力な機能 ( として知られている) があります。私はparse、リスト内包表記のためにそのようなミニ DSL を作成していました。表現を解釈するために、内包表記を含むブロックが関数に渡されcomprehendます。

例:

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

どういうわけか、comprehend私には正しく聞こえませんが、のようなものevalは一般的すぎます。

リスト内包表記にキーワードまたは関数を必要とする他の言語は見つかりませんでした。それらが存在する場合は、純粋な構文糖衣です。残念ながら、私にはその選択肢がありません。では、関数を持たなければならないことを考えると、適切で簡潔な論理名は何でしょうか?

4

4 に答える 4

4

どうselectですか?

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

于 2009-02-01T21:44:15.470 に答える
2

リスト内包表記は map に似ていると考えることができるので、「listmap」のような呼び方を考えるかもしれません。あるいは、リスト内包表記は set-builder 表記法に基づいているため、「build」または「buildlist」の行に沿って何かを呼び出すことができます。

(免責事項: REBOL についてはほとんど知らないので、これらの名前が既に使用されている場合はご容赦ください)

于 2009-02-01T21:25:30.313 に答える
2

変身する

于 2009-02-02T01:29:30.913 に答える
1

doリスト内包表記はモナド内包表記の 1 つのインスタンスにすぎずdo、Haskell で糖化されたモナド計算に使用されるキーワードであるため、適切である可能性がありますが、ユーザー ライブラリにはあいまいすぎると思われます。私は自分のリスト内包関数を呼び出しcompましたが、それはあなたが既に持っているものを単に省略したものです。おそらくyielding?例yielding [(a * b) for a in 1x100 for b in 4x10 where (all [odd? a odd? b])]。ちょっと目を細めて、[ ] がないふりをします。

于 2009-02-01T21:51:03.367 に答える