Комментарий Джорджа о первоначальном решении, дающем неверные результаты, является правильным, поскольку {x=/}
не говорит о том, что все элементы в списке равны, это скользящий логический параметр, который проверяет, соответствует ли следующий элемент нулю или единице.Нечто подобное {all x[0]=x}
достигнет того, что вы хотели.
К точке Джеммаса, если имена ваших столбцов могут отличаться, и вы хотите использовать конструкцию выбора, тогда вам придется использовать функциональный выбор формы:
q)data:([] date:10#.z.D;name:10?`4;cashType:10?`A`B;t1:-5+10?10;t2:-5+10?10;t3:-5+10?10)
q)dateCols:-3#cols data
q)![data;();0b;(1#`validateSign)!enlist ({all flip x[;0]=x};(flip signum@;enlist,dateCols))]
date name cashType t1 t2 t3 validateSign
----------------------------------------------
2018.05.31 hjkn B -1 4 0 0
2018.05.31 okdm A 2 0 3 0
2018.05.31 jggp A 3 -3 0 0
2018.05.31 oimo A -1 -2 -3 1
2018.05.31 naea A -1 4 3 0
2018.05.31 jadb B 1 0 1 0
2018.05.31 nojg A 4 4 4 1
2018.05.31 keno B 4 2 -5 0
2018.05.31 hdai B -3 1 -5 0
2018.05.31 mfmf A 0 1 -5 0