위키 백과 페이지에서 summation에 관해서는 하스켈에서의 동등한 조작은 접기을 사용하는 것입니다. 내 질문은 :이 대신 합계를 사용하는 이유가 무엇입니까? 다른 하나보다 '순수 주의자'인가, 아니면 진정한 차이가없는 것인가?하스켈에서의 summation 표기법
답변
foldl
은 일반적으로 tail-recursive reduce 기능입니다. 재귀는 함수형 프로그래밍 언어에서 항목 목록을 조작하는 일반적인 방법이며 루프 반복에 대한 대안을 제공합니다.이 반복은 훨씬 더 우아합니다. fold
과 같은 감소 함수의 경우 꼬리 재귀 구현 is very efficient. 다른 사람들이 설명한 것처럼 sum
은 foldl (+) 0 l
의 편리한 니모닉입니다.
아마도 위키 백과 페이지에서의 사용은 꼬리 - 재귀를 통한 합계의 일반적인 원칙을 설명하기위한 것입니다. 그러나 Haskell Prelude 라이브러리에는 더 짧고 이해하기 쉬운 sum
이 포함되어 있으므로이를 코드에서 사용해야합니다.
여기에는 하스켈의 fold
기능 중 nice discussion 기능이 있으며, 읽기 쉬운 가치있는 간단한 예제가 있습니다.
하스켈 또는 위키 백과 페이지의 foldl
에 대한 내용은 표시되지 않지만, 하스켈의 sum
은 foldl
이라는 특수한 경우입니다. 그것은 예를 들어, 다음과 같이 구현할 수 있습니다 차이가 없습니다
sum = foldl (+) 0
:
sum l = foldl (+) 0 l
로 감소 될 수있다. 이 페이지는 단순히 sum
이 foldl
을 사용하여 구현되었다고 말하고 있습니다. 숫자 목록의 합계를 계산할 필요가있을 때마다 sum
을 사용하면됩니다.
다른 사람들이 말했듯이 아무런 차이가 없습니다. 그러나 총 통화는 폴드 콜보다 읽기가 쉽기 때문에 합계가 필요한 경우 합계로 이동하십시오.
주목할 점은 합계가 원하는 것보다 더 게으르다는 것입니다. 따라서 foldl '을 사용해보십시오.
합계의 개념은 숫자가 아닌 유형으로 확장 할 수 있습니다. 필요한 것은 모두 (+) 연산 및 0 값과 동일한 것입니다. 즉, monoid이 필요합니다. 이것은 하스켈 함수 "mconcat"로 이어지며, 이는 monoid 타입의 값 목록의 합을 반환합니다. 물론 디폴트 인 "mconcat"은 플러스 연산 인 "mappend"에 의해 정의됩니다.
- 1. 하스켈에서의 python eval에 해당합니다.
- 2. 하스켈에서의 평등의 효율성
- 3. 표기법
- 4. 과학적 표기법
- 5. $ {varName} 표기법
- 6. 복소수 표기법
- 7. 파이썬 표기법?
- 8. 접두어 표기법
- 9. 리터럴 표기법
- 10. 표기법 문제
- 11. C 포인터 표기법
- 12. C에서 포인터 표기법
- 13. 빅 O 표기법 런타임
- 14. Intellij IDEA의 헝가리 표기법
- 15. PHP json_decode 표기법 문제
- 16. S와 RegEx 표기법?
- 17. 이벤트에 대한 다이어그램 표기법
- 18. '종료'구성을위한 UML 표기법
- 19. JavaScript 도트 표기법
- 20. 십진법에 과학적 표기법
- 21. L \ 문자 표기법?
- 22. 업데이트시 MongoDB 점 표기법
- 23. 자바의 과학 표기법 추상화
- 24. 큰 -0 표기법 순서도
- 25. 는 JAXB 표기법
- 26. 자바 int ... 배열 표기법
- 27. 자바 스크립트 표기법 : (function() {...})();
- 28. 질문 (>) 표기법
- 29. JQuery - 익숙하지 않은 표기법
- 30. XSLT XPath에서 '/ ..'표기법 사용
아아, 이제 알겠습니다. 나는 'foldl'에 대한 검색을했지만 Wikipedia 페이지는 'fold'를 사용합니다. –