- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
是否有任何 Lisp 或 scheme 方言可以很好地支持数组和线性代数操作。我所说的良好支持并不是指 BLAS/LAPACk 的接口(interface),而是语言本身的高效数组原语。比如说,如果它能够对抗 Numpy,我会认为它是有效的。我听说 Stalin 的速度非常快,但我对 lisp 还很陌生,不熟悉这种语言中多维数组在语法上的方便操作和高效表示。特别是如果有个人经验的支持,将不胜感激(没有双关语)。
最佳答案
Arrays在标准 Common Lisp 中可以是多维的。
Array Dictionary描述了可用的操作。
CL-USER 12 > (defparameter *a* (make-array '(3 2 4) :initial-element 'foo))
*A*
CL-USER 13 > *a*
#3A(((FOO FOO FOO FOO) (FOO FOO FOO FOO))
((FOO FOO FOO FOO) (FOO FOO FOO FOO))
((FOO FOO FOO FOO) (FOO FOO FOO FOO)))
CL-USER 14 > (setf (aref *a* 1 1 2) 'bar)
BAR
CL-USER 15 > *a*
#3A(((FOO FOO FOO FOO) (FOO FOO FOO FOO))
((FOO FOO FOO FOO) (FOO FOO BAR FOO))
((FOO FOO FOO FOO) (FOO FOO FOO FOO)))
CL-USER 16 > (array-dimensions *a*)
(3 2 4)
在处理数组时,使用 Common Lisp 的另一个特性可能会有用:类型声明和编译器优化。 Common Lisp 允许在不声明类型的情况下编写通用代码。但是在关键部分,可以声明变量、参数、返回值等的类型。然后可以指示编译器摆脱一些检查或使用特定于类型的操作。支持量取决于编译器。还有更复杂的编译器,如 SBCL、LispWorks 和 Allegro CL,它们支持各种优化。一些编译器还给出了大量的编译信息。
最后的手段是使用外部函数接口(interface) (FFI) 来调用 C 代码或使用内联汇编程序(某些编译器支持)。
Common Lisp 在标准中默认有 LOOP 宏。它允许表达典型的命令式循环结构。还有一个替代方案,ITERATE宏 - 它可能对多维数组有一些优势。
另请注意,Lisp 数组有一些不寻常的特性,例如置换数组。它们使用一些其他数组的存储,但可以有不同的维度布局。
有时编写特殊的宏也很有用,它隐藏了使用数组的样板。如果没有带有类型声明的 Lisp 代码,多维数组和 LOOP 可能会有点大。不使用特殊语言抽象的典型代码示例如下:fft.lisp .
Common Lisp 编译器通常不提供开箱即用的 SIMD 指令或其他形式的数据并行性的特殊用途。可能存在异常(exception)情况。
关于arrays - 具有良好多维数组编程支持的 Lispy 方言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6702239/
嗨,我正在考虑开发一种文件传输程序,想知道我是否想要尽可能好的加密,我应该使用什么? 我会用 C# 开发它,所以我可以访问 .net 库 :P在我的 usb 上有一个证书来访问服务器是没有问题的,如果
我创建的这个计算两个数组的交集是线性的方法的复杂度(在良好、平均、最差的情况下)? O(n) public void getInt(int[] a,int[] b){ int i=0; int
我已经能够使用 RTCPeerConnection.getStats() API 获得 WebRTC 音频调用的各种统计信息(抖动、RTT、丢包等)。 我需要将整体通话质量评为优秀、良好、一般或差。
基本问题: 如果我正在讲述/修改数据,我应该通过索引硬编码索引访问文件的元素,即 targetFile.getElement(5);通过硬编码标识符(内部翻译成索引),即 target.getElem
在 Linux 上,我想知道要调用什么“C”API 来获取每个 CPU 的统计信息。 我知道并且可以从我的应用程序中读取 /proc/loadavg,但这是系统范围的负载平均值,而不是每个 CPU 的
在客户端浏览器中使用 fetch api,GET 或 POST 没有问题,但 fetch 和 DELETE 有问题。它似乎将 DELETE 请求方法更改为 OPTIONS。 大多数研究表明是一个cor
我是一名优秀的程序员,十分优秀!