함수 생성기를 만들고 싶습니다.test.check의 함수 발생기
실제로는 IFn
값의 생성자가 있지만 함수 도메인이 무한 (값이 엄격하므로) 경우 함수 생성자로 사용하는 것이 일반적으로 바람직하지 않습니다.
이 기능이 존재합니까? 아니면 직접 구현해야합니까?
함수 생성기를 만들고 싶습니다.test.check의 함수 발생기
실제로는 IFn
값의 생성자가 있지만 함수 도메인이 무한 (값이 엄격하므로) 경우 함수 생성자로 사용하는 것이 일반적으로 바람직하지 않습니다.
이 기능이 존재합니까? 아니면 직접 구현해야합니까?
나는 그 대답이 어떤 종류의 동작을 기대하는지에 달려 있다고 생각합니다. 일반적으로 gen/let
또는 gen/fmap
을 사용하여 생성 된 값을 기반으로 임의의 함수를 만들 수 있습니다. 예를 들어, 값 목록을 생성하고 입력의 hash
에 따라 목록에서 뭔가를 집어 들고 기능을 구성하는 데 사용할 수 있습니다 : gfredericks에
(gen/let [rets (gen/not-empty (gen/vector gen/any))]
(fn [x]
(rets (mod (hash x) (count rets)))))
건물보다 완벽한 솔루션 대답 :
를(defn fn-gen
([result-gen results-n result-scale]
(gen/fmap
(fn [results] (fn [& args] (get results (mod (apply + (map hash args)) results-n))))
(gen/vector (gen/scale (partial + result-scale) result-gen) results-n)))
([result-gen result-n] (fn-gen result-gen result-n 10))
([result-gen] (fn-gen result-gen 10)))
'(맵 해쉬 결과) '대신'(맵 해쉬 args)'를 사용 했습니까? – gfredericks
@gfredericks 좋은 캐치, 응. 고맙습니다. – MasterMastic