为易于表示高抽象级函数,可以考虑使用元素是多项式的矩阵。我们称这个为 boxed table。例如, [ m =: 2 2 $ 1 2 ; 1 2 1 ; 1 3 3 1 ; 1 4 6 4 1 +-------+---------+ |1 2 |1 2 1 | +-------+---------+ |1 3 3 1|1 4 6 4 1| +-------+---------+ [ n =: 2 3 $ 1 2 3 ; 3 2 1 ; 1 0 1 ; 3 3 3 3 ; _1 _2 3; 3 4 5 +-------+-------+-----+ |1 2 3 |3 2 1 |1 0 1| +-------+-------+-----+ |3 3 3 3|_1 _2 3|3 4 5| +-------+-------+-----+ 下一步,我们将定义一个新版本的psum, pdif和pprod,假设它们的参数是boxed polynomials。 psumb =: psum &. > pdifb =: pdif &. > pprodb =: pprod &. > 之后我们可以为了这些元素是多项式的矩阵定义一个矩阵乘积: pmp =: psumb / . pprodb m pmp n +---------------------+---------------+------------------+ |4 13 19 18 9 3 |2 4 3 6 3 |4 12 17 16 5 | +---------------------+---------------+------------------+ |4 20 45 61 56 36 15 3|2 5 5 8 14 11 3|4 19 43 60 52 25 5| +---------------------+---------------+------------------+ m pmp m +--------------------+-----------------------+ |2 9 14 10 5 1 |2 10 20 22 15 6 1 | +--------------------+-----------------------+ |2 12 30 42 37 21 7 1|2 13 38 66 75 57 28 8 1| +--------------------+-----------------------+ m pmp^:0 m +-------+---------+ |1 2 |1 2 1 | +-------+---------+ |1 3 3 1|1 4 6 4 1| +-------+---------+ m pmp^:1 m +--------------------+-----------------------+ |2 9 14 10 5 1 |2 10 20 22 15 6 1 | +--------------------+-----------------------+ |2 12 30 42 37 21 7 1|2 13 38 66 75 57 28 8 1| +--------------------+-----------------------+ m pmp^:2 m +----------------------------------------+----------------------------------------------+ |4 29 88 152 176 148 88 36 9 1 |4 31 106 217 304 309 230 123 45 10 1 | +----------------------------------------+----------------------------------------------+ |4 35 137 323 521 613 539 353 168 55 11 1|4 37 158 418 772 1055 1094 864 513 222 66 12 1| +----------------------------------------+----------------------------------------------+ m pmp^:10 x: &. > m +-------------------------------------------------... |1024 29952 424704 3899184 26124316 136500501 5803... +-------------------------------------------------... |1024 31488 471040 4577232 32551980 180983051 8205... +-------------------------------------------------... 5.6 证明Iverson和其它的作者已经使用J语言写了数本关于数学计算的书。其中一个[Ive 1995]在[Gra 1989]使用J语言描述算法和证明。下面的例子是从[Ive 1995]摘录的。 在定理声明中,一个表达式I和另外一个r相等。我们可以在J语言中使用如下方式表示两者关系: t=: l -: r 这是我必须匹配r,t必须是常函数1所有输入。t有时叫做 同义反复。例如, l =: +/ @ i. NB. Sum of integers r =: (] * ] - 1:) % 2: 如果我们定义n= : ],右边是一个恒等函数,我们可以转化最后一个等式: r =: (n * n - 1:) % 2: 下一步, t =: l -: r 注意实验上呈现的, 不管输入参数为何,t总是1. t 1 2 3 4 5 6 7 8 9 1 1 1 1 1 1 1 1 1 定理证明是从l到r的一系列恒等表达式有序组合。 l +/ @ i. Definition of l +/ @ |. i. Sum is associative and commutative (|. is reverse) ((+/ @ i.) + (+/ @ |. @ i.)) % 2: Half sum of equal values +/ @ (i. + |. @ i.) % 2: Summation distributes over addition +/ @ (n # n - 1:) % 2: Each term is n -1; there are n terms (n * n - 1:) % 2: Definition of multiplication r Definition of r 当然,上述证明每个表达式是都是一个简单的程序,而证明是一系列有序验证可以将一个表达式转化成另一个。 5.7 J可以作为一种数学符号Iverson讨论了数学符号在数学计算中的作用。在这篇文章他引用了 A. N. Whitehead 通过减轻大脑不必要的工作负担,一种好的数学符号可以把精力集中在更高级的问题上,事实上增加了脑力劳动的强度。 F. Cajori 一些诸如 , , 的数学符号仅适用于正整数,如果应用于浮点数、负数和复数,则可能导致致命错误。 A. de Morgan 数学符号,就像语言一样,并没有严格的限制而得到广泛使用,它的便利性和规定得到了大多数人的认同。 其它著名的引用是与J语言的特性有关: Friedrich Engels 在科学中,每一种新的术语都会引发革命性的改变 Bertrand Russell 好的符号有一种一种微妙和暗示性的作用,就像一位活生生的老师一般 A. N. Whitehead, 数学的序言作者 这里有一个众所周知的错误,重复已出版的书籍和那些名人的演讲,我们应该富有创新精神并且思考我们可以做什么。事实的情况可能与我们想象的不同,文明的进步提升了数学运算的重要性,但我们却没有深入的思考他们 当然,J语言符号正变得流行,让大脑从繁琐的计算中解放出来,集中精力思考运算背后的事情。它也移除了数学计算的多义性,不要被_3(十减三)和应用程序中的-3混淆。 一种好的数学符号扩展的例子可以在Cajori的外部乘积的引用中(spelled .)找到。+/ . *(矩阵乘积)被表达成一种外部的乘积推导出其它有用的外部乘积诸如+./ . *。 很遗憾,J语言并没有被计算机科学广泛接受,在数学上接受就更少了。 参考文献:
|