Clojure koans 解构示例
Clojure koans destructuring example
我目前正在网上查看与解构相关的 clojure koan
参数但无法传递它
公案如下:
给出的数据:
(def test-address
{:street-address "123 Test Lane"
:city "Testerville"
:state "TX"})
我们有
(= "Test Testerson, 123 Test Lane, Testerville, TX"
( ----missing part----- ["Test" "Testerson"] test-address))
我的一个解决方案是:
(= "Test Testerson, 123 Test Lane, Testerville, TX"
( apply
(fn[ a & more ]
( let [ x (reduce str (interpose " " a))
y (reduce str (interpose ", " (vals more) ))]
(str x ", " y))) ["Test" "Testerson"] test-address))
这在 repl 中有效,但在给定站点上无效。所以我的问题是,有没有更好的解决方案?我不确定上面的示例是否设置为寻找更好或特定的解决方案。
您的代码可能失败的一个原因是地图键未排序。 (vals more)
可以而且很可能会在不同版本的 clojure 中给出不同顺序的序列。
您可以尝试的解决方案是
((fn
[[f-name l-name] {:keys [street-address city state]}]
(format "%s %s, %s, %s, %s" f-name, l-name, street-address, city, state))
["Test" "Testerson"] {:street-address "123 Test Lane", :city "Testerville", :state "TX"})
编辑:clojurescript 没有 format
实现 [1]。您可以将整个 format
表格替换为以下 str
表格,
(str f-name " " l-name ", " street-address ", " city ", " state)
我试过了,很有效。
这适用于 Koan 网站和 repl:
(fn [x m]
(clojure.string/join ", "
(cons (clojure.string/join " " x)
(reverse (sort-by count (vals m)))
)
)
)
它cons
将两个新字符串 ["Test" "Testerson"]
join
合并到 test-address
的值,并使结果字符串的顺序与使用 sort-by
和 reverse
回答。
这是您的代码,稍作更正:
(= "Test Testerson, 123 Test Lane, Testerville, TX"
(apply
(fn [a & more]
(let [x (reduce str (interpose " " a))
y (reduce str (interpose ", " (reverse (sort-by count (vals more)))))]
(str x ", " y)))
["Test" "Testerson"] test-address)
)
=> ;true
我目前正在网上查看与解构相关的 clojure koan 参数但无法传递它
公案如下:
给出的数据:
(def test-address
{:street-address "123 Test Lane"
:city "Testerville"
:state "TX"})
我们有
(= "Test Testerson, 123 Test Lane, Testerville, TX"
( ----missing part----- ["Test" "Testerson"] test-address))
我的一个解决方案是:
(= "Test Testerson, 123 Test Lane, Testerville, TX"
( apply
(fn[ a & more ]
( let [ x (reduce str (interpose " " a))
y (reduce str (interpose ", " (vals more) ))]
(str x ", " y))) ["Test" "Testerson"] test-address))
这在 repl 中有效,但在给定站点上无效。所以我的问题是,有没有更好的解决方案?我不确定上面的示例是否设置为寻找更好或特定的解决方案。
您的代码可能失败的一个原因是地图键未排序。 (vals more)
可以而且很可能会在不同版本的 clojure 中给出不同顺序的序列。
您可以尝试的解决方案是
((fn
[[f-name l-name] {:keys [street-address city state]}]
(format "%s %s, %s, %s, %s" f-name, l-name, street-address, city, state))
["Test" "Testerson"] {:street-address "123 Test Lane", :city "Testerville", :state "TX"})
编辑:clojurescript 没有 format
实现 [1]。您可以将整个 format
表格替换为以下 str
表格,
(str f-name " " l-name ", " street-address ", " city ", " state)
我试过了,很有效。
这适用于 Koan 网站和 repl:
(fn [x m]
(clojure.string/join ", "
(cons (clojure.string/join " " x)
(reverse (sort-by count (vals m)))
)
)
)
它cons
将两个新字符串 ["Test" "Testerson"]
join
合并到 test-address
的值,并使结果字符串的顺序与使用 sort-by
和 reverse
回答。
这是您的代码,稍作更正:
(= "Test Testerson, 123 Test Lane, Testerville, TX"
(apply
(fn [a & more]
(let [x (reduce str (interpose " " a))
y (reduce str (interpose ", " (reverse (sort-by count (vals more)))))]
(str x ", " y)))
["Test" "Testerson"] test-address)
)
=> ;true