私のリストに一連のテストを適用し、すべてのテストがパスされていることを確認します。 Clojureに "andmap"と似た関数がありますか?clojureに "andmap"と似た機能がありますか?
5
A
答えて
9
1
every?
「この1つの関数は、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 integer? odd?)
==>
(fn [x] (and (integer? x)
(odd? x)))
、すなわち、その引数として述語を取り、「述語の周り
and
をラップ」という機能を構築するマクロとして
andmap
を書きました
(これはに正確にはに拡張されませんが、これに相当するものに展開されます)
これは、あなたがArthurs answerになるだろうと実行時例外を取得せずに
(every? (andmap integer? odd?) [1 3 "a string"])
を書くことができますので、それは述語にshortcuircuts利点を持っています。ここで
はandmap
の定義です:
(defmacro andmap ([] `(fn [& x#] true)) ([p & ps] `(fn [& x#] (and (apply ~p x#) (apply (andmap [email protected]) x#)))))
原因lazynessへの述語に機能も短絡としてandmap
を定義することも可能である:
(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はevery-pred(および "or"バージョンの関連するsome-fn)を追加します。
clojure.core /毎-predを ([P] [P1とP2] [P1 P2 P3] [P1 P2 P3 & PS])
は真を返す関数fを述語の集合を受け取り、返しその述語を構成している 述語のすべてがそのすべての引数に対して論理真の値を返した場合は、 falseを返します。 fは、最初の 引数の実行を停止し、元の述部に対して論理偽の結果をトリガーする点で短絡していることに注意してください。
ナイーブな実装では、かもしれない:
(DEFN毎-predを[& preds(FN [&引数](毎#(すべての%引数)preds))?)
実際実装のパフォーマンスが向上します。
関連する問題
- 1. Flash Playerの機能に似たRubyフレームワークはありますか?
- 2. あなたがSublimeと似たようにタイプすると、Emacsには拡張機能がありますか
- 3. ネイティブClojureにResilient Distributed Datasetと同等の機能がありますか?
- 4. PostgreSQLにはCassandraのキースペースに似た機能がありますか?
- 5. VB.NETには、TSQLの "IN"に似た機能がありますか? TSQLで
- 6. phpのsqlsrvライブラリのmysql_real_escape_stringに似た機能はありますか?
- 7. SMSの拡張機能に似たものはありますか?
- 8. IntelliJの "Code Fragment mode"に似たVisual Studioの機能はありますか?
- 9. ClojureとそのWebフレームワークで、Railsのurl_forに似た機能をどのように実装しますか?
- 10. Clojureには何がありますか?
- 11. Visual StudioまたはResharperにはEclipseに似た自動補完上書き機能がありますか?
- 12. リバースマップ機能はありますか?
- 13. Yii Framework POSTとGETに似た機能
- 14. iOSにRXAndroidと似たライブラリがありますか
- 15. QtにGTK +のGtkSizeGroupと似たものがありますか?
- 16. ココアにgetViewById()と似たものがありますか?
- 17. vimに "nano -R"と似たオプションがありますか
- 18. AndroidにCheckBoxのonListClickViewと似たメソッドがありますか?
- 19. Apache ImpalaにHiveの 'explode'機能と同等の機能がありますか?
- 20. Visual Studioコードには、EclipseのPTP(プロジェクト同期ツール)に似た拡張機能がありますか?
- 21. Visual Studio CodeにはEmacsのTramp Modeに似た拡張機能がありますか?
- 22. "dotimes"と "for"機能の間には何かがありますか?
- 23. グループ化機能とグループ化機能はありますか?
- 24. PythonにRのquantstratに似た何かがありますか?
- 25. Clojureと同等のinject:into:Smalltalkには何がありますか?
- 26. 私のC#バージョンに似た、エレガントなPythonの再利用可能な待機がありますか?
- 27. PHPと似たC#の機能Eval()
- 28. Gitflow:リリースごとに1つの機能がありますか?
- 29. C#/ UWPにUIImageRenderingModeAlwaysTemplateと同等の機能がありますか?
- 30. MonoにはILDASMと同等の機能がありますか?
手書き入力と出力を追加できますか? –