我想对我的列表应用一系列测试,并确保所有测试都通过了。 在Clojure中是否有类似“andmap”的函数?clojure中是否有类似“andmap”的函数?
5
A
回答
9
1
every?
会问“这个函数是否对每个seq的成员都返回true”,这与我认为你所要求的接近。对every?
的改进将采用函数列表,并询问“这个seq的每个成员的所有这些谓词是否正确”。
这是第一次尝试:
(defn andmap? [data tests]
(every? true? (for [d data, f tests]
(f d))))
user> (andmap? '(2 4 8) [even? pos?])
true
user> (andmap? '(2 4 8) [even? odd?])
false
1
我写andmap
宏这需要谓词作为参数,并建立一个功能,“环绕的谓词的and
”,即
(andmap integer? odd?)
==>
(fn [x] (and (integer? x)
(odd? x)))
(它并不扩展到,这个确实是这个,但是它扩展到相当于这个的东西)
这具有shortcuircuts的谓词所以你可以写
(every? (andmap integer? odd?) [1 3 "a string"])
没有得到一个运行时异常,你会与Arthurs answer获得优势。
这里是andmap
定义:
(defmacro andmap ([] `(fn [& x#] true)) ([p & ps] `(fn [& x#] (and (apply ~p x#) (apply (andmap [email protected]) x#)))))
也可以定义andmap
作为函数在其上的谓词也短路由于lazyness:
(defn andmap [& ps] (fn [& x] (every? true? (map (fn [p] (apply p x)) ps))))
的谓词andmap可以接受任意数量的参数,因此可以写入
(map (andmap #(and (integer? %1)
(integer? %2))
#(and (odd? %1)
(even? %2))
<)
[1 3 9]
[2 6 "string"])
其中评估为(true true false)
。
2
Clojure 1.3将添加每个pred(以及与“或”版本相关的some-fn)。
clojure.core /每-预解码 ([P] [P1 P2] [P1 P2 P3] [P1 P2 P3 & PS])
采用一组谓词和返回一个函数f,则返回true如果构成谓词的所有 都对其所有参数返回逻辑真值,否则返回 false。请注意,f是短路的,因为它将停止执行第一个参数,该参数会触发原始谓词的逻辑错误结果。
一个幼稚的做法是:
(DEFN每-PRED [& preds(FN [&参数](每一个#(每%参数)preds))?)
但实际实施将会有更好的表现。
相关问题
- 1. Python是否有andmap/ormap?
- 2. mysql的SQL_CALC_FOUND_ROWS在postgresql中是否有类似的函数?
- 3. 在asp.net razor中是否有类似于Eval()的函数?
- 4. 在PHP 5.2中是否有类似于stristr()的函数?
- 5. numpy中是否有函数比较类似numpy.where函数的多维数组?
- 6. 是否有类似于Python计数器功能的Javascript函数?
- 7. slf4j中是否有类似org.apache.log4j.EnhancedPatternLayout的类?
- 8. 是否有类似于mysql的sqlsrv库的函数mysql_real_escape_string?
- 9. 是否有Int.isWholeNumber()函数或类似的东西?
- 10. 是否有类似strip_tags()和trim()的UTF-8函数?
- 11. javascript中是否有unique()函数来删除数组中的类似元素?
- 12. asp.net中是否有类似java的servlet
- 13. Chrome中是否有globalStorage的类似物?
- 14. JavaScript中是否存在类似checkdate()的php函数?
- 15. R中是否存在expand.grid类似的函数,返回排列?
- 16. 在dlg类中是否有getdocument()函数?
- 17. 除了InvokeScript之外,是否有类似于Windows Phone 8中的InvokeScriptAsync的函数?
- 18. Java中是否有RedBeanPHP ORM类似物?
- 19. Cocoa中是否有类似[aCalCalendar setType]?
- 20. 在glib或libc中是否有类似boost :: filesystem :: remove_all(path)的函数?
- 21. 是否可以在基类中有函数,但在子类中有lambda函数?
- 22. bada中是否有类似android中的“Context”的类?
- 23. Java中是否有类似android中的android.os.Handler的类?
- 24. Visual Studio是否有类似Borland的CodeGuard?
- 25. 是否有类似这样的API?
- 26. Scala/java是否有类似Python的StringIO?
- 27. Sage Pay是否有类似PayPal的IPN?
- 28. CSS是否有类似jQuery的:has()?
- 29. 是否有类似于SMS的扩展?
- 30. 是否有类似$ templateCache的图像?
你能添加一个emaple输入和输出吗? – 2009-07-31 21:50:09