我开始学习Clojure,但我不明白为什么下面的代码没有按预期工作。
给定一个字符串,我希望它打印长度超过2个字符的所有单词,首字母大写。
预期输出:("Fine" "Day")
实际输出:("fine" "day")
(ns exploring
(:require [clojure.contrib.string :as str]))
(defn a-function [word]
"Capitaliza todas palavras maiores que 2 chars"
(if (>(count word ) 2) (str/capitalize word)))
(use '[clojure.contrib.str-utils :only (re-split)])
(filter a-function (re-split #"\W+" "A fine day it is"))
答案 0 :(得分:3)
除了过滤器我还会使用map:
(ns exploring
(:require [clojure.string :as str])
(:use '[clojure.contrib.str-utils :only (re-split)])
(def a-function
[word]
(> (count word) 2))
(map str/capitalize
(filter a-function
(re-split #"\W+" "A fine day it is")))
答案 1 :(得分:1)
您可以将keep
与原始a-function
:
(keep a-function (re-split #"\W+" "A fine day it is"))
答案 2 :(得分:0)
如果返回大写单词的顺序并不重要,您也可以这样做:
(reduce #(if (> (count %2) 2) (cons (str/capitalize %2) %) %) nil (re-split #"\W+" "A fine day it is"))
导致(“日”“好”)
我并不是说这更好,只是另一种解决同样问题的方法。