performance - 이란 - 함수형 프로그래밍 모나드




하스켈에서 평등의 효율성 (2)

데이터를 가져 와서 동일한 데이터 또는 약간 수정 된 버전을 반환하는 함수가 있습니다.

내 프로그램이 바뀌면 한 가지, 변경하지 않으면 다른 것을하고 싶습니다.

이전에는 쌍 (Bool,Object) 을 반환하고 fst 를 사용하여 변경되었는지 확인했습니다. 최근에는 객체를 반환하고 == 사용하여 평등을 검사하여 코드를 단순화 할 수있었습니다.

그러나 하스켈은 깊은 평등 검사와 "객체 동일성"(즉, 포인터 평등)을 구별하지 않는다는 것을 깨달았습니다. 그렇다면 == 사용하는 것이 효율적인지 여부를 어떻게 알 수 있습니까? 효율성상의 이유로 그것을 피해야합니까, 아니면 컴파일러가 깊은 평등 검사를 수행 할 필요가 없다고 판단 할 수있는 경우가 있습니까?

일반적으로 나는 초기 프로그램을 작성하는 동안 효율성에 대해 너무 걱정하지 않을 것이지만 이것은 모듈에 대한 인터페이스에 영향을 미치므로 너무 많은 코드를 작성하기 전에 바로 얻고 싶다. 그리고 프로그램을 많이 만들만한 가치가없는 것처럼 보인다. 코드의 작은 부분만으로는 효율성이 떨어집니다. 또한 GHC에 의존 할 수있는 최적화의 종류에 대해 더 잘 알고 싶습니다.


나는 아직도 상대적인 쇠뇌 멍청한 녀석이에요. 그래서 소금 한알로 제 대답을 가져오고, 제 대답이 직접적으로 그렇게하지 않으면 용서해주세요!

Haskell에서 연산자는 특별한 것이 아니라 중개 함수입니다.

표준 서곡에서 평등 연산자정의를 직접 볼 수 있습니다.

물론 정의한 데이터 유형으로 작업 할 수 있도록 오버로드 될 수 있습니다. 오버로드를 수행하면 구현이 얼마나 효율적인지 알 수 있습니다.

Hoogle 을 사용하여 원하는 함수 정의를 찾을 수 있다는 것을 아는 것이 도움이됩니다. 그것이 평등 연산자의 정의를 찾은 방법입니다.


파생 된 (==) 항상 깊은 비교입니다. 당신의 질문은 haskell-cafe에서 discussed 되었습니다.







haskell