Como if () funciona em planilhas org?
Tive a impressão do manual que
| a | |
| b | |
#+TBLFM: $2=if($-1==a, 1, 0)
deve produzir "1" na primeira linha e "0" na segunda. Mas em vez disso eu recebo
| a | 1 |
| b | b = a ? 1 : 0 |
#+TBLFM: $2=if($-1==a, 1, 0)
O que estou entendendo mal aqui?
Respostas
Provavelmente, é melhor usar fórmulas Lisp para coisas como essa. Como mostra a resposta de @ db48x, há alguns cozinheiros naquela cozinha e o que eles estão fazendo nem sempre é óbvio. A depuração de fórmula pode ajudar, mas nem sempre é eficaz (presumo que foi assim que @ db48x descobriu a coisa "(a)", mas pode não ser o caso).
Eu acho as conversões de string imprevisíveis, então para coisas não numéricas em particular, eu tendo a ficar longe de fórmulas de cálculo e fazer isso em Lisp.
Neste caso específico, tente o seguinte:
| a | 1 |
| b | 0 |
#+TBLFM: $2 = '(if (string= $-1 "a") 1 0)
A desvantagem (?) É que você tem que aprender um pouco do Lisp, mas isso é bom: caso contrário, como você vai mexer com todas as configurações do Emacs?
Não sei exatamente o que está acontecendo aqui, mas depois de fazer uma pequena depuração, descobri que funciona:
| a | |
| b | |
#+TBLFM: $2=if("$1"=="(a)", 1, 0)
Parece-me que está fazendo uma simplificação algébrica para obter uma resposta e, se isso falhar, pode ficar com uma forma mais complicada do que você esperava. b = a ? 1 : 0é uma expressão ternária que não foi avaliada para um valor, provavelmente porque ae bsão tratadas como variáveis em vez de strings. Portanto, você tem que colocá-los entre aspas, mas então "$ -1" avalia como uma string com parênteses por razões desconhecidas, então você deve incluir esses parênteses no outro lado da equação também.