반응형
Clojure에서 doseq와 for의 차이점
Clojure에서 doseq와 for의 차이점은 무엇입니까? 하나를 다른 것보다 사용하기로 선택한 몇 가지 예는 무엇입니까?
차이점은 for
지연 시퀀스를 만들고 반환하는 반면 doseq
부작용을 실행하고 nil을 반환한다는 것 입니다.
user=> (for [x [1 2 3]] (+ x 5))
(6 7 8)
user=> (doseq [x [1 2 3]] (+ x 5))
nil
user=> (doseq [x [1 2 3]] (println x))
1
2
3
nil
다른 시퀀스를 기반으로 새 시퀀스를 작성하려면 for를 사용하십시오. 일부 시퀀스의 요소를 기반으로 부작용 (인쇄, 데이터베이스에 쓰기, 핵탄두 발사 등)을 수행하려면 doseq를 사용하십시오.
또한 게 으르 doseq
면서 열망 for
합니다. Rayne의 답변에 누락 된 예는 다음과 같습니다.
(for [x [1 2 3]] (println x))
REPL에서 이것은 일반적으로 원하는 것을 수행하지만 기본적으로 우연 for
입니다. 비대화 형 환경에서는 아무것도 인쇄되지 않습니다. 결과를 비교하여 실제로 확인할 수 있습니다.
user> (def lazy (for [x [1 2 3]] (println 'lazy x)))
#'user/lazy
user> (def eager (doseq [x [1 2 3]] (println 'eager x)))
eager 1
eager 2
eager 3
#'user/eager
def
양식은 생성 된 새 var를 반환하고 여기에 바인딩 된 값을 반환 하기 때문에 REPL이 인쇄 lazy
할 항목이 없으며 실현되지 않은 lazy-seq를 참조합니다. 요소가 전혀 계산되지 않았습니다. eager
을 참조 nil
하고 모든 인쇄가 완료됩니다.
참고 URL : https://stackoverflow.com/questions/4725417/difference-between-doseq-and-for-in-clojure
반응형
'developer tip' 카테고리의 다른 글
CSS를 통해 미리 서식이 지정된 텍스트로 요소 표시 (0) | 2020.08.20 |
---|---|
여러 키로 암호화 / 복호화 (0) | 2020.08.20 |
개별 줄을 끊지 않고 파일을 동일한 부분으로 분할하는 방법은 무엇입니까? (0) | 2020.08.20 |
본문 스크롤 비활성화 (0) | 2020.08.20 |
최고의 Java obfuscator? (0) | 2020.08.20 |