어떻게하면 해시 값을 늘리거나 줄이기 위해 haskell에서 문자열을 해시 할 수 있습니까? 예를 들면 다음과 같습니다.각 문자열에 대해 고유 한 정수를 만드시겠습니까?
hash:: String -> Integer
>hash "foo"
1234123412
>hash "bar"
5938454
또는 그 라인을 따라 무엇인가? 나는 haskell에서 해싱에 익숙하지 않아 어떤 도움을 주시면 감사하겠습니다! 감사.
어떻게하면 해시 값을 늘리거나 줄이기 위해 haskell에서 문자열을 해시 할 수 있습니까? 예를 들면 다음과 같습니다.각 문자열에 대해 고유 한 정수를 만드시겠습니까?
hash:: String -> Integer
>hash "foo"
1234123412
>hash "bar"
5938454
또는 그 라인을 따라 무엇인가? 나는 haskell에서 해싱에 익숙하지 않아 어떤 도움을 주시면 감사하겠습니다! 감사.
Hackage의 hashable 패키지를 사용할 수 있습니다. 그것은 문자열을 포함한 표준 타입의 숫자에 대한 해시 기능을 제공합니다
Prelude Data.Hashable> hash "foo"
653367
Prelude Data.Hashable> hash "bar"
649056
자신을 구현하려면, 해시 함수는 일반적으로 배로 표현하기 쉽다. 예를 들어, 다음은 DJB2 해시의 변형입니다.
hash :: String -> Int
hash = foldl' (\h c -> 33*h `xor` fromEnum c) 5381
이러한 해시 함수는 간단하고 빠른 의미입니다. 보다 복잡한 해시 함수를 찾고있는 경우 cryptohash 패키지에서 선택 항목을 찾을 수 있습니다.
문자열을 기본 maxBound :: Char의 숫자로 처리하십시오. – augustss