J是一种函数式编程语言,它使用函数化组成方式模拟计算处理。J提供一种叫做隐式(tacit)的编程方式。隐式(Tacit)编程无需引用他们的参数,并且常常使用特别的构成规则,这被叫做hooksand forks。显式编程这种传统的控制结构也被支持。内部一个显式的定义,左边的参数是一对的,总是被命名为 x. 同时单参数(与右边的双参数类似)会被命名为 y. 。 J提供了一个强有力的简单数据结构集合比如(列表)list和(数组)array。数据(在J语言中撤销是函数的第一类状态),一旦将标识创建为常量或者函数应用,就不可以再修改。数据项具备这样几个属性,例如类型(type)(数字或者字符,确切值或者不确定值等等),图形(shape)(每个轴线上都有长度的列表(list))和排(rank)(轴线上的数字)。名称(Name)是一个抽象的工具(非内存单元),它可以被赋值(或者反向赋值)为数据或者函数。 5 J 语言编程示例函数式编程中计算的基础模型是函数组合. 一个程序包含一系列的函数应用程序,它们互相协作共同计算出程序的最终结果. J编程语言包含丰富的原生函数,使用更高级别的函数和组合规则将它们组合在一起供程序使用. 为了更好的理解理解组合规则和更高级别的函数,我们可以使用标准的数学符号以符号的形式构造出一些语言的特性。我们先从使用字符数据给参数名字赋值开始. x =: 'x' y =: 'y' 我们希望有一些命名为 f. g, h, 以及 i 的函数, 每一个函数的形式如下 : f =: 3 : 0 'f(',y.,')' : 'f(',x.,',',y.,')' ) 我们使用一种函数生成定义,它使用到了一个模式,而不是为每一个函数都输入定义(以及他们的反函数). math_pat =: 3 : 0 '''',y.,'('',y.,'')''',LF,':',LF,'''',y.,'('',x.,'','',y.,'')''' ) 应用 math_pat 会产生如下定义: math_pat 'f' 'f(',y.,')' : 'f(',x.,',',y.,')' 使用我们所拥有的显示的定义 (:) 以及 反向定义 (:.): f =: (3 : (math_pat 'f')) :. (3 : (math_pat 'f_inv')) g =: (3 : (math_pat 'g')) :. (3 : (math_pat 'g_inv')) h =: (3 : (math_pat 'h')) :. (3 : (math_pat 'h_inv')) i =: (3 : (math_pat 'i')) :. (3 : (math_pat 'i_inv')) 它会为 f. g, h, 和 i 中的每一个函数都生成定义,还有每一个函数的反函数的符号式定义. 接下来,我们使用这些定义来探索J的一些组合规则以及更高级别的函数. f g y f(g(y)) (f g) y f(y,g(y)) x f g y f(x,g(y)) x (f g) y f(x,g(y)) f g h y f(g(h(y))) (f g h) y g(f(y),h(y)) x f g h y f(x,g(h(y))) x (f g h) y g(f(x,y),h(x,y)) f g h i y f(g(h(i(y)))) (f g h i) y f(y,h(g(y),i(y))) x f g h i y f(x,g(h(i(y)))) x (f g h i) y f(x,h(g(y),i(y))) f@g y f(g(y)) x f@g y f(g(x,y)) f&g y f(g(y)) x f&g y f(g(x),g(y)) f&.g y g_inv(f(g(y))) (h &. (f&g))y g_inv(f_inv(h(f(g(y))))) x f&.g y g_inv(f(g(x),g(y))) f&:g y f(g(y)) x f&:g y f(g(x),g(y)) (f&g) 'ab' f(g(ab)) (f&(g"0)) 'ab' f(g(a)) f(g(b)) (f&:(g"0)) 'ab' f( g(a) g(b) )))) f^:3 y f(f(f(y))) f^:_2 y f_inv(f_inv(y)) f^:0 y y f 'abcd' f(abcd) f/ 2 3$'abcdef' f(abc,def) (f/"0) 2 3$'abcdef' abc def (f/"1) 2 3$'abcdef' f(a,f(b,c)) f(d,f(e,f)) (f/"2) 2 3$'abcdef' f(abc,def) 'abc' f/ 'de' f(abc,de) 'abc' (f"0)/ 'de' f(a,d) f(a,e) f(b,d) f(b,e) f(c,d) f(c,e) 'abc' (f"1)/ 'de' f(abc,de) 最新评论 |