4 ms·
I will do some research on APL and your mentioned 'commute operator', cannot comment on it now. But regarding languages: k/q the issues with them is that they u
by rabarbers 5y ago
I will do some research on APL and your mentioned 'commute operator', cannot comment on it now.
But regarding languages: k/q the issues with them is that they use x, y and z as keywords for the parameters. x is always the first parameter, y - second, z - third. In KatLang parameter names are not predefined keywords, you can pick almost any parameter names you like.
- geocar 5y ago> But regarding languages: k/q the issues with them is that they use x, y and z as keywords for the parameters. x is always the first parameter, y - second, z - third. In KatLang parameter names are not predefined keywords, you can pick almost any parameter names you like. They aren't in q either: x can be redefined to whatever you like. How does KatLang determine which argument is first? Is it merely the first free variable?
- rabarbers 5y agoYes, the first unknown identifier becomes the first parameter, next unknown identifier becomes next parameter and so on...
- rabarbers 5y agoMore specifically: the first unknown identifier becomes the first parameter for the closest algorithm defined with {} brackets. Properties (also called named algorithms) are defined as {} context. And KatLang program also is defined as {} context. I call it Second order algorithm - algorithms can contain another algorithms. First order algorithm is something defined between commas or semicolons. But inside brackets () or {} you can define second order algorithm.
- geocar 5y agoYou might like looking at how Dyalog handles higher-order functions; John Scholes really put this beautiful presentation together about using them as a depth-first search reusable function https://www.youtube.com/watch?v=DsZdfnlh_d0 https://www.youtube.com/watch?v=DsZdfnlh_d0 and if you haven't seen it, you should!
- rabarbers 5y agoAccording to Q documentation, Q supports only 3 implicit parameters x, y, z: https://web.archive.org/web/20190213035913/http://code.kx.com/wiki/Tutorials/Functions https://web.archive.org/web/20190213035913/http://code.kx.co...
- geocar 5y agoThey're just variables like any other; {[x;y;z] x+yz} is almost exactly the same as {x+yz}
- rabarbers 5y agoCan you explain the difference little bit more, Maybe using Javascript pseudocode as comparable example? I want to understand how Q is different from KatLang. The problem with me is that I do not know where I can try Q code, therefore I rely only on the documentation fragments I can find.
- geocar 5y agoLast I checked there was a free download with an email on kx.com
- rabarbers 5y agoI tested and seems, that x is the first implicit parameter, y - second, z - third. It is as stated in their online documentation. When you try following example: {y+x*z}[1;2;3] It gives result: 5 And in Q you cannot define implicit parameters with names, for example,: a, b, c. But You can define parameters explicitly: {[a;b;c]a+b*c}[1;2;3] I still think that their implicit parameters are keywords. Similarly as keyword 'it' in Kotlin programming language is used to refer to the single parameter of the lambda expression. In KatLang there are no predefined implicit parameter names. The user is the one who defines implicit parameters by declaring the implicit parameter names.
- geocar 5y agoNo. They are not keywords. The program: x:42; f:{[a]x+a} is the same as: x=42; f=function(a){return x+a}