Clojure 为什么过滤器不返回谓词函数的结果?
我开始学习Clojure,但我不明白为什么下面的代码不能按预期工作 给定一个字符串,我希望它打印所有长度超过2个字符且首字母大写的单词 预期输出:Clojure 为什么过滤器不返回谓词函数的结果?,clojure,Clojure,我开始学习Clojure,但我不明白为什么下面的代码不能按预期工作 给定一个字符串,我希望它打印所有长度超过2个字符且首字母大写的单词 预期输出:(“晴天”) 实际输出:(“晴天”) 除过滤器外,我还将使用map: (ns exploring (:require [clojure.string :as str]) (:use '[clojure.contrib.str-utils :only (re-split)]) (def a-function [word] (> (
(“晴天”)
实际输出:
(“晴天”)
除过滤器外,我还将使用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")))
除过滤器外,我还将使用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")))
您可以将
keep
与原始a-函数一起使用
:
(keep a-function (re-split #"\W+" "A fine day it is"))
您可以将
keep
与原始a-函数一起使用
:
(keep a-function (re-split #"\W+" "A fine day it is"))
如果大写单词的返回顺序不重要,您也可以执行以下操作:
(reduce #(if (> (count %2) 2) (cons (str/capitalize %2) %) %) nil (re-split #"\W+" "A fine day it is"))
导致(“罚款日”)
我不是说这更好,只是解决同样问题的另一种方法。如果大写单词的返回顺序不重要,您也可以:
(reduce #(if (> (count %2) 2) (cons (str/capitalize %2) %) %) nil (re-split #"\W+" "A fine day it is"))
导致(“罚款日”)
我不是说这更好,只是解决同样问题的另一种方法。哦,该死,这里的代码哦,该死,这里的代码是因为
filter
生成一个包含原始seq元素的seq,谓词(a-function
)返回true。因此,您的解决方案不会产生大写的结果。因为filter
生成一个包含原始seq元素的seq,谓词(a-function
)会为其返回true。所以你的解决方案不会产生资本化的结果。为什么?在这种情况下,这只会导致(false-true-false)。是的,使用修改后的a-function
谓词将产生一系列布尔值。但我指的是@user428691的原始定义:(defn a-function[word](if(>(count word)2)(str/capitalize word))
。为什么?在这种情况下,这只会导致(false-true-false)。是的,使用修改后的a-function
谓词将产生一系列布尔值。但我指的是@user428691的原始定义:(defn a-function[word](if(>(count word)2)(str/capitalize word))
。