这个功能有标准名称吗?

时间:2009-10-08 16:00:08

标签: functional-programming terminology naming higher-order-functions

对于采用列表和函数的函数,您会命名什么?如果将函数应用于所有元素,则返回True会产生相同的结果?

def identical_results(l, func):
    if len(l) <= 1: return True
    result = func(l[0])
    for el in l[1:]:
        if func(el) != result:
            return False
    return True

这件事有一个很好的普遍接受的名字吗?如果你能以不那么笨重的方式实施,那就是奖金。

5 个答案:

答案 0 :(得分:5)

在.NET中,最接近的是Array.TrueForAll

也许SameForAll更适合这个功能?

答案 1 :(得分:4)

我还没有听说过这个特殊名称(有点类似于Forall,但并不完全相同)。 IdenticalResults似乎没问题(Jon Seigel提出SameForAll,也很不错)

此外:这是使用all函数(在.NET下TrueForall)在Haskell中实现这一点的方式

ident [] = True
ident (x:xs) = all (== x) xs

sameForAll f = ident . map f

和Python:

def idents(f, list):
    if len(list) <= 1:
        return True
    else:
        let fx0 = f(list[0])
        return all(( f(x) == fx0 for x in list[1:] ))

答案 2 :(得分:1)

到目前为止还不能想到一个好名字,但是这个名字也是如此:

def identical_results(l, func):
    return len(set(map(func, l))) <= 1

答案 3 :(得分:0)

相同的结果听起来像是一个合理的名字。

答案 4 :(得分:0)

我在上面的评论中发布了这个,但是格式化了,所以这里再次为了清晰起见:

def identical_results(l, func):
    return reduce(lamdba x,y: x and y, map(func, l))