이해력을 나열하는 레볼 함수를 부르는 것은 무엇입니까?
-
03-07-2019 - |
문제
레볼에는 목록 이해를 수행 할 수있는 내장 방법이 없습니다. 그러나 Debol에는 강력한 시설이 있습니다 ( parse
) 도메인 별 언어 (DSL)를 만드는 데 사용할 수 있습니다. 나는 사용했다 parse
목록 이해력을위한 미니 DSL을 작성합니다. 표현을 해석하기 위해 이해력을 포함하는 블록은 함수로 전달되며, 더 나은 용어가 부족하여 comprehend
.
예시:
comprehend [(a * b) for a in 1x100 for b in 4x10 where (all [odd? a odd? b])]
몇 가지 이유, comprehend
나에게 옳은 소리는 아니지만 같은 것 eval
너무 일반적입니다.
목록 이해를 위해 키워드 나 기능이 필요한 다른 언어를 찾지 못했습니다. 그들은 존재하는 곳마다 순수한 구문 설탕입니다. 불행히도 나는 그 옵션이 없습니다. 그래서, 내가 기능이 있어야한다는 것을보고, 좋은, 간결하고 논리적 인 이름은 무엇입니까?
해결책
어때 select
?
select [(a * b) for a in 1x100 for b in 4x10 where (all [odd? a odd? b])]
다른 팁
목록 이해력은지도와 유사하다고 생각할 수 있으므로 "ListMap"과 같은 것을 생각할 수 있습니다. 또는 목록 이해력은 세트 빌더 표기법을 기반으로하기 때문에 "빌드"또는 "빌드리스트"라인을 따라 무언가를 호출 할 수 있습니다.
(면책 조항 : 나는 Rebol에 대해 거의 알지 못 하므로이 이름이 이미 취해 졌는지 용서하십시오)
변환
do
목록 이해가 Monad 이해의 한 사례이므로 적절할 수 있습니다. do
Haskell에서 Sugared Monadic 계산에 사용되는 키워드이지만 사용자 라이브러리에는 너무 모호하다고 생각합니다. 나는 내 목록 이해 기능을 불렀다 comp
, 그러나 그것은 당신이 이미 가지고있는 것의 약어 일뿐입니다. 아마도 yielding
? 예를 들어 yielding [(a * b) for a in 1x100 for b in 4x10 where (all [odd? a odd? b])]
. 단지 일종의 곁눈질을하고 []가없는 척합니다.