q语言中的方法,对于于数学算法中的map。q中的方法即为替换相应的参数,一句一句的执行所有方法中定义的语句。
方法的格式
f:{[p1,p2...] e1;e2...;en} 注意方法中的语句是从左到右执行的。方法其实就是包括在{}这种的部分。所以方法可以没有名字。例如:
{x+y}[4;3]
::[1 2 3] //返回1 2 3 本身,方法::是返回参数本身。
方法是名词,因此可以成为列表的元素,或者复制给其他名词。
方法的返回值即为最后一个语句的执行结果,或者是最后一个语句的值。在方法中命名的变量也就是局部变量,其作用域控制在方法之内。而q语言中对全局变量的限制是32个。不可超过此限制。在方法中赋值全局变量的是通过:: , 例如f:{b::7;x*b}。
一旦全局变量在方法体内被重新定义后,无论如何我们都不能分为外面的全局变量,除非通过set方法。例如:
a:42
g:{a:98.6;`a set x}
方法的参数:
一个没有中括号的方法体,默认接受三个参数,分别赋值给x,y,z。所以建议不要使用x,y,z作为你的变量。
输入的参数数量极为该方法的valence。目前q的限制是8个。
作为map的方法
不难发现,从list和function看来,取同一个值现在有两种方式,但是表示法可以是一致的。例如list的下标取法和function的参数取法。因此,在q中,list和function都实现了map。
阅读(1068) | 评论(0) | 转发(0) |