在Clojure中查找集合中最长字符串的长度

在Clojure中查找集合中最长字符串的长度,clojure,Clojure,这似乎很容易搞笑,但我不知怎么搞不懂:在Clojure中,如何找到集合中最长字符串的长度 e、 g.(fn[“猫”、“狗”、“熊])=>4用户=>((fn[strs](应用最大地图计数strs)))[“猫”、“狗”、“熊”]) 4. user=>((fn[strs](应用最大地图计数strs)))[“猫”“狗”“熊”]) 4. (max(count coll))正在对集合进行计数,该集合返回3,然后取max中的3(无),结果为3。这不是你想要的 (apply max count coll)导致(

这似乎很容易搞笑,但我不知怎么搞不懂:在Clojure中,如何找到集合中最长字符串的长度

e、 g.
(fn[“猫”、“狗”、“熊])=>4

用户=>((fn[strs](应用最大地图计数strs)))[“猫”、“狗”、“熊”])
4.
user=>((fn[strs](应用最大地图计数strs)))[“猫”“狗”“熊”])
4.
(max(count coll))
正在对集合进行计数,该集合返回3,然后取
max
中的3(无),结果为3。这不是你想要的

(apply max count coll)
导致
(max count“cat”“dog”“bear”)
将符号和字符串与
max
进行比较,并引发异常,因为
max
需要一个或多个数字

(fn[“猫”、“狗”、“熊”])
是无效的语法,并导致异常情况,即
fn
不符合规范。特殊形式
fn
将符号向量(绑定形式)作为第一个参数(或者可选的是名称,而不是绑定形式的第三个参数)。例如,
(fn ident[n]n))
是一个名为ident的函数,它接受一个参数
n
,并返回
n
((fn[n]n)1);=>1

考虑到这些因素,一种方法是首先确定
coll
中元素的计数,然后找到该coll的
max

(def coll[“猫”“狗”“熊])
(如果不需要副本,则使用一套
{“猫”“狗”“熊”}

以下是几种方法:

(应用最大值(映射计数列));=>4
在计数集合中打开集合
[3 3 4]
应用max
以获得
(max 3 3 4)

(减少最大值(映射计数列));=>4
与上述内容相同,但通过仅获取第一个元素的
max
,然后使用上一个结果的
max
的第二个元素来减少集合,依此类推

根据您的需要,您可以执行以下操作:

(按coll计数分组);=>{3[“猫”“狗”],4[“熊”}

(按计数排序[“a”“aa”“aaa”“aa”“aaaaa”“a”];=>(“a”“a”“aa”“aa”“aaaa”“aaaaa”)
(max(count coll))
正在对集合进行计数,该集合返回3,然后取
max
中的3(无)得到3。这不是你想要的

(apply max count coll)
导致
(max count“cat”“dog”“bear”)
将符号和字符串与
max
进行比较,并引发异常,因为
max
需要一个或多个数字

(fn[“猫”、“狗”、“熊”])
是无效的语法,并导致异常情况,即
fn
不符合规范。特殊形式
fn
将符号向量(绑定形式)作为第一个参数(或者可选的是名称,而不是绑定形式的第三个参数)。例如,
(fn ident[n]n))
是一个名为ident的函数,它接受一个参数
n
,并返回
n
((fn[n]n)1);=>1

考虑到这些因素,一种方法是首先确定
coll
中元素的计数,然后找到该coll的
max

(def coll[“猫”“狗”“熊])
(如果不需要副本,则使用一套
{“猫”“狗”“熊”}

以下是几种方法:

(应用最大值(映射计数列));=>4
在计数集合中打开集合
[3 3 4]
应用max
以获得
(max 3 3 4)

(减少最大值(映射计数列));=>4
与上述内容相同,但通过仅获取第一个元素的
max
,然后使用上一个结果的
max
的第二个元素来减少集合,依此类推

根据您的需要,您可以执行以下操作:

(按coll计数分组);=>{3[“猫”“狗”],4[“熊”}


(按计数排序[“a”“aa”“aaa”“aa”“aaaaa”“a”];=>(“a”“a”“aa”“aa”“aaa”“AAAA”)

您能添加您尝试过的内容吗?当然!我尝试了(max(count coll)),这在我看来“似乎”是对的,但它只给出了收藏中的物品数量。然后我阅读了“应用”和“减少”,并尝试了各种组合,如(应用最大计数coll),但这些都会抛出错误。我知道这是一个陈词滥调,但我真的不明白如何在Clojure中思考这个问题——在Python(etc)中,我知道三种不同的方法来解决这个问题,但我认为从概念上我还不明白Clojure是如何工作的。在问题中列出我试过的几件事,或者作为评论,或者其他什么,这通常被认为是一种良好的礼仪吗?我假设其他初学者将来在尝试做同样的事情时也会出现在这个页面上,所以我试图让问题尽可能简洁,但如果愿意的话,将来可以更广泛!是的,你可以把它们放在问题本身中。@marbiru帮助解释什么是一个好问题。你能补充一下你试过的吗?当然!我尝试了(max(count coll)),这在我看来“似乎”是对的,但它只给出了收藏中的物品数量。然后我阅读了“应用”和“减少”,并尝试了各种组合,如(应用最大计数coll),但这些都会抛出错误。我知道这是一个陈词滥调,但我真的不明白如何在Clojure中思考这个问题——在Python(etc)中,我知道三种不同的方法来解决这个问题,但我认为从概念上我还不明白Clojure是如何工作的。在问题中列出我试过的几件事,或者作为评论,或者其他什么,这通常被认为是一种良好的礼仪吗?我假设其他初学者将来在尝试做这些练习时会出现在这个页面上