- O valor de retorno da função
Enum.all? para uma lista vazia é true
- As funções
all do Haskell, all do Python e every? do Clojure também funcionam da mesma forma
- Retornar true para uma lista vazia facilita a implementação
true && f(elem1) && f(elem2) ...
- Mas ela não foi implementada assim apenas por conveniência
- Ela foi implementada para estar de acordo com a definição lógica de verdade vacuamente verdadeira
- Para entender a verdade vacuamente verdadeira, é preciso observar a condicional material
- Se p é falso, então p → q é sempre verdadeiro
- “Se a Estátua da Liberdade estiver em Seul, então a Torre Eiffel está em Pohang” é uma afirmação verdadeira
- Porque p, ou seja, “a Estátua da Liberdade está em Seul”, é falso
- Nessa condicional material, quando p é falso e por isso a afirmação se torna automaticamente verdadeira, isso é chamado de verdade vacuamente verdadeira
- Na verdade vacuamente verdadeira, qualquer proposição sobre um conjunto vazio passa a ser verdadeira
- Usando como exemplo “todos os celulares da sala estão desligados”
- x é tudo o que está na sala
- P(x) é “x é um celular”
- Q(x) é “x está desligado”
- Como x é vazio, P(x) é falso. Pela verdade vacuamente verdadeira, a afirmação é sempre verdadeira.
- Portanto, o valor de retorno da função
Enum.all? para uma lista vazia é true.
3 comentários
Estou aprendendo com isso haha, obrigado por compartilhar.
Mesmo que a abordagem matemática e de ciência da computação seja essa, na hora de programar parece meio confuso, então acho melhor não usar assim kkk
Principalmente em
if, isso confunde bastante porque uma lista vazia é tratada comoFalse.Em Python, é assim:
all([]) == True
all([[]]) == False
Por isso, eu prefiro escrever as condições de forma explícita para quem vai ler o código.
Algo como
if len(arr) == 0:em vez deif not arr:.Também daria para citar um exemplo como
if flag is False:em vez deif not flag:.Pelos meus critérios, no caso de
all([[]]), reescrever comoall([expressão condicional for ... in []])tornaria o código mais legível.Ah~ então no Python, como listas vazias são valores falsy, o valor de retorno de
all([[]])éFalse. Como os valores truthy e falsy variam de linguagem para linguagem, às vezes acabo cometendo esse tipo de erro quando uso outra linguagem. :)Só como referência, no Elixir apenas
niloufalsesão valores falsy, entãoEnum.all?([[]])retornatrue.