Pergunta

O que você nomearia uma função que pega uma lista e uma função, e retornaria true se a aplicação da função a todos os elementos fornecer o mesmo resultado?

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

Existe um bom nome geralmente aceito para essa coisa? Bônus se você pode implementar de uma maneira menos desajeitada.

Foi útil?

Solução

Em .net, o mais próximo é Array.TrueForAll.

Pode ser SameForAll Seria mais apropriado para esta função?

Outras dicas

Ainda não ouvi falar de um nome especial para isso (um pouco semelhante a Forall, mas não exatamente). IdenticalResults parece bom então (Jon Seigel propôs SameForAll, também muito bom)

Além disso: é assim que se poderia implementar isso em Haskell usando o all função (TrueForall Under .Net)

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

sameForAll f = ident . map f

E 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:] ))

Não consigo pensar em um bom nome até agora, mas este faz o mesmo:

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

idêntico_results parece um nome razoável para mim.

Eu postei isso em um comentário acima, mas a formatação ficou bagunçada, então aqui está novamente para clareza:

def identical_results(l, func):
    return reduce(lamdba x,y: x and y, map(func, l))
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top