标量和向量之间的区别在 APL 中有何用处?
In what way is the distinction between scalars and vectors useful in APL?
我是一名开始学习 APL 的经验丰富的软件工程师,为了尽早对该语言有更好的感受,我想了解为什么该语言向编码人员公开了标量和向量之间的区别。据我所知,在我的研究中,这只会限制灵活性,而不会产生任何好处来弥补它。结果是 APL 代码与其他不必要的变通方法(例如 ravels、enclose 和 disclosures)混在一起。
由于 APL 是一种奇怪且难以阅读的语言,我在 APL 中构建自己的帮助程序库以制作我自己的 APL 式界面,并避免在中使用不稳定的 "idioms"原始 APL 来完成日常任务。在我在整个帮助程序库中构建 scalar/vector 区别的抽象之前,我是否应该意识到这样做可能会牺牲任何实用程序?
谢谢!
如果你正在编写一个需要向量的函数,我建议你忘记输入是标量的可能性(考虑它未定义的行为),并强制 caller 将参数分解为向量。它应该 到目前为止 是少数情况(如果不是,那你就做错了)。就像你写了一个接受矩阵的函数,你不会期望它被赋予一个向量。在向量中使用标量与在矩阵中使用向量一样奇怪。
确实很奇怪,1 2 3
和1 2
是向量,但是1
本身就是一个标量,所以如果你想要一致性,就不要用[=13创建向量=] 表示法(又名链表示法)并忘记数组可以完全像那样创建。当然,我 实际上 不希望你这样做,我希望有一种符号可以用相同的方式创建任何大小的向量。
此外,不要忘记 APL 支持等级 > 1 的数组,正确使用它是写好 APL 的主要部分。标量是秩 0(0 维)、向量 - 1 (1D)、矩阵 - 2 (2D) 等
我是一名开始学习 APL 的经验丰富的软件工程师,为了尽早对该语言有更好的感受,我想了解为什么该语言向编码人员公开了标量和向量之间的区别。据我所知,在我的研究中,这只会限制灵活性,而不会产生任何好处来弥补它。结果是 APL 代码与其他不必要的变通方法(例如 ravels、enclose 和 disclosures)混在一起。
由于 APL 是一种奇怪且难以阅读的语言,我在 APL 中构建自己的帮助程序库以制作我自己的 APL 式界面,并避免在中使用不稳定的 "idioms"原始 APL 来完成日常任务。在我在整个帮助程序库中构建 scalar/vector 区别的抽象之前,我是否应该意识到这样做可能会牺牲任何实用程序?
谢谢!
如果你正在编写一个需要向量的函数,我建议你忘记输入是标量的可能性(考虑它未定义的行为),并强制 caller 将参数分解为向量。它应该 到目前为止 是少数情况(如果不是,那你就做错了)。就像你写了一个接受矩阵的函数,你不会期望它被赋予一个向量。在向量中使用标量与在矩阵中使用向量一样奇怪。
确实很奇怪,1 2 3
和1 2
是向量,但是1
本身就是一个标量,所以如果你想要一致性,就不要用[=13创建向量=] 表示法(又名链表示法)并忘记数组可以完全像那样创建。当然,我 实际上 不希望你这样做,我希望有一种符号可以用相同的方式创建任何大小的向量。
此外,不要忘记 APL 支持等级 > 1 的数组,正确使用它是写好 APL 的主要部分。标量是秩 0(0 维)、向量 - 1 (1D)、矩阵 - 2 (2D) 等