- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在一本 Lisp 教科书中读到这个:
Lisp can perform some amazing feats with numbers, especially when compared with most other languages. For instance, here we’re using the function
expt
to calculate the fifty-third power of 53:
CL> (expt 53 53)
24356848165022712132477606520104725518533453128685640844505130879576720609150223301256150373
Most languages would choke on a calculation involving such a large number.
是的,这很酷,但作者没有解释为什么 Lisp 可以比其他语言更容易、更快速地做到这一点。
肯定有一个简单的原因,谁能解释一下?
最佳答案
这是一个很好的例子 "worse is not always better" .
“传统”语言,如 C/C++/Java,具有基于硬件能力的有限范围的整数算法,例如,int32_t
- 带符号的 32 位数字,当结果发生时会悄无声息地溢出不适合 32 位。这是非常快的,而且对于实际目的来说通常看起来已经足够好了,但是会导致难以发现的细微错误。
Lisp 采用了不同的方法。
它有一个“小的”未装箱的整数类型 fixnum
,并且当 fixnum 算术的结果不适合 fixnum
时,它会自动透明地提升为任意大小 bignum
, 所以你总能得到数学上正确的结果。这意味着,除非编译器可以证明结果是 fixnum
,否则它必须添加代码来检查 bignum
是否必须被分配。实际上,这在现代架构上应该具有 0 成本,但在 4 多年前做出时是一个不平凡的决定。
“传统”语言在提供 bignum 算术时,是以“库”方式提供的,即
BigInteger.add(a,b)
而不是 a+b
;请注意,Lisp 方法非常符合 doing the right thing 的 Lisp 传统。以一些额外的复杂性为代价。还体现在自动化内存管理上,现在是主流,但在过去遭到了恶毒的攻击。整数运算的 lisp 方法现在已用于其他一些语言(例如 python),所以进展正在发生!
关于lisp - 是什么赋予了 Lisp 出色的数学性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19678694/
Solr中有什么方法可以给同义词赋予权重? (由 SynonymFilterFactory 生成) 问题的较长版本/一些背景: 我们希望为 SynonymFilterFactory 注入(inject
假设我有一个可以扩展的 A 类。在 A 类中,我有一个列表 List 。所以这个类将包含一个包含元素 A 的列表。现在,如果我将这个类 B 扩展为 A 的子类,我希望类 B 具有相同的成员 List
有没有办法让 SKNode 拥有自己的物理特性?我有一个 SKShapeNode 调用“backGround”,我将其用作大多数其他节点的父节点。我不断地将“背景”向左移动,给人一种玩家正在前进的错觉
我想观察一个由完全独立的代码修改的 ObservableList。我的问题是,我不仅希望在列表更改时调用 ListChangeListener(当我附加监听器时,列表可能已经包含元素),而且我还希望将
我正在尝试通过按最匹配的记录对记录进行排序来改进我的网站之一中的搜索功能。 我有以下 mysql 表。 调查回复 +--------+-------------+------------------+
我想给予 最高优先级.在我的示例中,我想要 的背景-要显示的元素,而不是为 指定的内容-元素。 h1{ background-color:blue1!important } 但它在下面的上下
我正在使用 SliverAppBar和 SliverListView在我的项目中。 我需要BorderRadius到我的 SliverList这是我的 SliverAppBar 的底部. 这是我需要的
我有它,这样当您(PaintBrush)完成时,一切都会清除并出现一个按钮。单击该按钮时,它开始二级,在这里它创建一个新的 Canvas 。我添加了一些代码,以便在单击按钮时删除旧 Canvas ,然
在下面的代码中,我分析给定的包以获取使用给定注释注释的所有类。 我想将它们及其注释(及其值)加载到 map 中。 package com.test @Named("valueToStock") pub
HTML: Div CSS: body{ width: 600px; height: 600px; background: red; }
我在我的图片库中应用了 jquery lighbox,但由于图像大小可变,灯箱大小不固定,因此以图像的原始大小打开,这反过来导致 biga 图像超出屏幕并显示浏览器中的水平滚动条。 因此,我正在寻找将
无论如何,包含文件是否可以在父范围内使用到它被调用的范围?以下示例经过简化,但完成相同的工作。 本质上,一个文件将被一个函数包含,但希望被包含文件的范围是调用包含它的函数的范围。 主.php: get
我有一个 html 页面,其中包含许多使用 a 标记的链接。我想在不同的选项卡中打开所有链接,而不是在所有标签中设置 target="_blank" ,有没有像下面的css那样做: a{target=
我正在使用 Zend_Navigation 并试图将它与 Zend_Acl 集成。导航中的每个页面都有一个 privilege 属性。我无法确定的是如何为单个页面定义多个权限。 用例:用于管理用户的页
所以,我的代码(Perl 脚本和 Perl 模块)位于这样的树中: trunk/ util/ process/ scripts/ 'util' 目录有,嗯,实用程序,'pr
这个问题在这里已经有了答案: How to clone a Date object? (8 个答案) 关闭 4 年前。 我正在处理日期,我的代码如下所示: (currentDate 只是要记住的实际
我刚开始使用 Crashlytics。我已经开始探索使用日志记录并创建了一个示例 ios 项目来测试它。我可以看到 CLSLogv 命令的第一个参数,但缺少第二个参数 例子:CLSLogv("Butt
我是 asp.net 的新手,我想为链接标签添加样式。我的代码如下: Guest .userlabel { display:inline-block; text-decoration:
我有一个页面,其中我使用 HTML 表格中的 RadiobuttonList。我已经为 table 和 td 提供了 CSS 样式。我还为 RadioButtonList 提供了 CSS 样式,但它没
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我是一名优秀的程序员,十分优秀!