2016-11-15 11 views
0

함수 생성기를 만들고 싶습니다.test.check의 함수 발생기

실제로는 IFn 값의 생성자가 있지만 함수 도메인이 무한 (값이 엄격하므로) 경우 함수 생성자로 사용하는 것이 일반적으로 바람직하지 않습니다.

이 기능이 존재합니까? 아니면 직접 구현해야합니까?

답변

2

나는 그 대답이 어떤 종류의 동작을 기대하는지에 달려 있다고 생각합니다. 일반적으로 gen/let 또는 gen/fmap을 사용하여 생성 된 값을 기반으로 임의의 함수를 만들 수 있습니다. 예를 들어, 값 목록을 생성하고 입력의 hash에 따라 목록에서 뭔가를 집어 들고 기능을 구성하는 데 사용할 수 있습니다 : gfredericks에

(gen/let [rets (gen/not-empty (gen/vector gen/any))] 
    (fn [x] 
    (rets (mod (hash x) (count rets))))) 
0

건물보다 완벽한 솔루션 대답 :

(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))) 
+0

'(맵 해쉬 결과) '대신'(맵 해쉬 args)'를 사용 했습니까? – gfredericks

+0

@gfredericks 좋은 캐치, 응. 고맙습니다. – MasterMastic