SML curried函数,该函数以列表和正数k作为输入,并检查其中是否有任何元素恰好出现k次。

SML curried函数,该函数以列表和正数k作为输入,并检查其中是否有任何元素恰好出现k次。,sml,smlnj,Sml,Smlnj,编写一个以列表和正数n为输入的通用函数f1 并检查其中是否有任何元素恰好出现n次 例如-f1[1,2,1,3]2; val it=true:bool -f1[1,2,1,3]3; val it=false:bool您需要计算列表中每个元素的出现次数。您需要一个计算发生次数的函数,以及一个对照列表本身检查列表中每个元素的函数 fun isThereCeratinNumberOfOccurences(lst, count) = let fun countOccurences(

编写一个以列表和正数n为输入的通用函数f1 并检查其中是否有任何元素恰好出现n次

例如-f1[1,2,1,3]2; val it=true:bool -f1[1,2,1,3]3;
val it=false:bool

您需要计算列表中每个元素的出现次数。您需要一个计算发生次数的函数,以及一个对照列表本身检查列表中每个元素的函数

fun isThereCeratinNumberOfOccurences(lst, count) =
    let
        fun countOccurences(lst, what) =
            if null lst 
            then 0
            else if hd lst = what
                 then 1 + countOccurences(tl lst,what)
                 else countOccurences(tl lst,what)

        fun checkEachElement(lst, elements, number) =
            if null elements
            then false
            else if countOccurences(lst, hd elements) = count
                 then true
                 else checkEachElement(lst, tl elements, count)
    in 
        checkEachElement(lst, lst, count)
    end

让我们看看你已经试过了什么。我们这里不做家庭作业。fun f1(ls,k)=如果ls=[],那么如果else f1(tl(hd(ls))=[hd(ls)],那么val i=i+1;如果i=k,则为真,否则为假;我在这里要做的是检查列表的每一个头部,如果两个值相同,则在每一步后将其反转,然后将一个int增加1,最后检查该整数是否为k。如果它们相等,则返回true,否则返回false。