小编kjo*_*kjo的帖子

为什么 (let ((x 'huh?)) (cons (boundp 'x) x)) 的计算结果为 (NIL . HUH?)?

我不明白这个:

CL-USER> (let ((x 'huh?)) (cons (boundp 'x) x))
(NIL . HUH?)
Run Code Online (Sandbox Code Playgroud)

我预计在let上面的表达式中,x将被绑定,因此整个表达式将被计算为(t . huh?)。否则,如果(与我的期望相反)x没有绑定在let的主体中,那么至少上面表达式的求值会导致错误(因为我将一个未绑定的变量作为第二个参数传递给cons)。

更让我困惑的是,Common Lisp HyperSpec 的描述是boundp 这样的

如果符号已绑定,则返回 true;否则,返回 false。

...其中“bound”一词超链接到该术语表定义(我的重点)1

bound adj.,vt 1. adj. 束缚的。在绑定中具有关联的表示。 “let 命名的变量绑定在其主体内。”请参阅 unbound。2. adj. 形容词 具有遮蔽[2]另一个的本地绑定。“变量print-escape在 princ 函数中被绑定。” 3. vt 绑定的过去时。

此外,CLHS 的文档说明let了以下内容(我的重点):

...所有变量varj绑定到相应的值;...

当然,HyperSpec 的页面boundp(我之前已经链接到了)有以下示例:

(let ((x 2)) (boundp …
Run Code Online (Sandbox Code Playgroud)

common-lisp

4
推荐指数
2
解决办法
90
查看次数

如何完全重置MATLAB?

我希望能够从一个非常干净的平板运行MATLAB :没有历史记录,没有快照,没有自定义,没有.更好的是,我希望能够在一个人刚开始安装MATLAB 的状态下启动一个MATLAB会话.这可能吗?

(当然,我正在寻找一种解决方案,不要求我从我的硬盘上删除每一条MATLAB [如果没有重新格式化驱动器可能无法完成],然后在其中重新安装一个新的MATLAB副本.)

FWIW,我正在运行7.11.0 R2010b.(到目前为止,我在网上找到的令人震惊的罕见/神秘的解决方案不适用于此版本.)

谢谢!

matlab

3
推荐指数
1
解决办法
1万
查看次数

Python函数如何确定是否(以及如何)显式传递了kwarg默认值?

假设一个函数spam有签名spam(ham=None).下面的三个调用都会导致局部变量hamspam名字空间中有值None:

spam()
spam(None)
spam(ham=None)
Run Code Online (Sandbox Code Playgroud)

如何spam找出实际使用这三种替代品中的哪一种?

python introspection

3
推荐指数
1
解决办法
91
查看次数

如何测试浮点数是否是"机器精度范围内"的整数?

我的问题的简要版本是:

怎样才算"最佳实践"的决定时,浮点数xMath.round(x)可被视为平等的,允许从浮点运算的精度损失?


啰嗦的版本是:

我经常需要决定给定的浮点值x是否应该被视为"整数",或者更迂腐,应该"被视为整数的浮点表示".

(例如,如果n是整数,则为数学表达式

log 10(10 n)

是一种表示相同整数n的复杂方式.这是一种思维,可以说类似浮点计算的结果可以被视为"整数的表示".)

每当Math.round(x) == x评估时,决策都很容易true:在这种情况下,我们可以说x确实是(整数的浮点表示).

但是Math.round(x) == x当它评估时,测试是不确定的false.例如,

function log10(x) { return Math.log(x)/Math.LN10; }
// -> function()
x = log10(Math.pow(10, -4))
// -> -3.999999999999999
Math.round(x) == x
// -> false
Run Code Online (Sandbox Code Playgroud)

编辑:我经常看到的一个"解决方案"就是选择一些任意的容差? = 1e-6,然后进行测试Math.abs(Math.round(x) - x) < ?.我认为这样的解决方案会产生比我认为更可接受的误报.

javascript floating-point precision equality floating-point-precision

3
推荐指数
1
解决办法
279
查看次数

如何对Numpy记录的数组进行hstack?

[此帖子的早期版本标题不正确:“如何在一列numpy记录中添加一列?” 问的问题在标题前面已经部分回答了,但这个答案是不太什么身体的这个帖子较早版本要求。我重新命名了标题,并对其进行了实质性的编辑,以使区别更加清晰。我还解释了为什么我前面提到的答案不符合我的期望。]


假设我有两个numpy数组xy,每个数组由r个 “ record”(也称为“结构化”)数组组成。设xbe 的形状为(rc x)和ybe 的形状为(rc y)。我们还假设x.dtype.names和之间没有重叠y.dtype.names

例如,对于r = 2,c x = 2,c y = 1:

import numpy as np
x = np.array(zip((1, 2), (3., 4.)), dtype=[('i', 'i4'), ('f', 'f4')])
y = np.array(zip(('a', 'b')), dtype=[('s', 'a10')])
Run Code Online (Sandbox Code Playgroud)

我想“水平”连接xy产生形状为(rc x + …

python numpy recarray

3
推荐指数
1
解决办法
1749
查看次数

什么相当于Postgres的一个DO块<9.0

什么是Postgres 8.4.8相当于

DO $$
BEGIN
IF NOT EXISTS (...) THEN
    EXECUTE ...;
END IF;
END; $$;
Run Code Online (Sandbox Code Playgroud)

postgresql

3
推荐指数
1
解决办法
1156
查看次数

如何模仿-l内部脚本

有没有一种简单的方法来模仿脚本中-l命令行开关的效果perl?(当然,我总是可以chomp每行,然后在我打印的每一行上附加"\n",但重点是避免必须这样做.)

perl

3
推荐指数
1
解决办法
72
查看次数

比函数(){return x}更简洁的延迟评估?

我正在移植一些很大程度上依赖于延迟评估的Python代码.这是通过thunks完成的.更具体地说,任何<expr>需要延迟评估的Python表达式都包含在Python"lambda表达式"中,即lambda:<expr>.

AFAIK,最接近的JavaScript等价物function(){return <expr>}.

由于我正在使用的代码绝对充斥着这样的thunk,我想让它们的代码更加简洁,如果可能的话.这样做的原因不仅在于保存字符(当涉及到JS时不可忽略的考虑因素),而且还使代码更具可读性.要了解我的意思,请比较此标准JavaScript表单:

function(){return fetchx()}
Run Code Online (Sandbox Code Playgroud)

\fetchx()
Run Code Online (Sandbox Code Playgroud)

在第一种形式中,实质性信息,即表达fetchx(),在印刷中被周围的function(){return...... 掩盖}.在第二种形式1中,只有一个(\)字符用作"延迟评估标记".我认为这是最佳方法2.

AFAICT,此问题的解决方案将分为以下几类:

  1. 使用eval模拟延迟评价.
  2. 一些我不了解的特殊JavaScript语法,它完成了我想要的.(我对JavaScript的无知使得这种可能性对我来说非常真实.)
  3. 在一些非标准的JavaScript中编写代码,以编程方式处理成正确的JavaScript.(当然,这种方法不会减少最终代码的占用空间,但至少可以在可读性方面保留一些增益.)
  4. 以上都不是.

我对听到最后三个类别的回答特别感兴趣.


PS:我知道使用eval(上面的选项1)在JS世界中被广泛弃用,但是,FWIW,下面我给出了这个选项的玩具插图.

我们的想法是定义一个私有包装类,其唯一目的是将纯字符串标记为用于延迟评估的JavaScript代码.然后使用具有短名称的工厂方法(例如C,用于"CODE")来减少例如,

function(){return fetchx()}
Run Code Online (Sandbox Code Playgroud)

C('fetchx()')
Run Code Online (Sandbox Code Playgroud)

首先,工厂C和辅助函数的定义maybe_eval:

var C = (function () {
  function _delayed_eval(code) { this.code = code; }
  _delayed_eval.prototype.val = function () { return eval(this.code) };
  return function (code) { …
Run Code Online (Sandbox Code Playgroud)

javascript lazy-evaluation thunk

3
推荐指数
1
解决办法
1120
查看次数

是否可以创建"0乘0"矩阵(或数组)?

reshape可以创建0-by-1矩阵和1-by-0矩阵:

>> reshape([], [0 1])
ans =
   Empty matrix: 0-by-1
>> reshape([], [1 0])
ans =
   Empty matrix: 1-by-0
Run Code Online (Sandbox Code Playgroud)

reshape也可以为n > 2 创建一个n数组,其中至少有一个维度为0.例如1

>> reshape([], [6 0 1 2 1])
ans =
   Empty array: 6-by-0-by-1-by-2
Run Code Online (Sandbox Code Playgroud)

但我没有设法哄骗reshape生产0-by-0 任何东西(矩阵或数组,即).例如

>> reshape([], [0 0])
ans =
     []
>> reshape([], [0 0 1])
ans =
     []
Run Code Online (Sandbox Code Playgroud)

有没有办法生成MATLAB以交互方式显示为0-by-0矩阵的实体?

更好的是,有没有办法创建一个实体,MATLAB将以交互方式显示为m- by- n数组,对于任何非负整数m和 …

matlab

3
推荐指数
1
解决办法
361
查看次数

是否有内置方式来翻转nd-array的第i维?

基本上,我正在寻找一个概括flipudfliplr翻转nd-array的第i维.

当要翻转的尺寸是第一个时,我想我可以使用

function flipped = flipfirst(ndarr)
    sz = size(ndarr);
    flipped = reshape(flipud(reshape(ndarr, sz(1), [])), sz);
end
Run Code Online (Sandbox Code Playgroud)

同样,如果要翻转的维度是最后一个,我可以使用

function flipped = fliplast(ndarr)
    sz = size(ndarr);
    flipped = reshape(fliplr(reshape(ndarr, [], sz(end))), sz);
end
Run Code Online (Sandbox Code Playgroud)

我确信我可以编写更通用的代码,通过调用permute和诸如此类的东西,但是有什么内置的吗?

我不确定reshape上面所有的内容是多么昂贵,但如果是的话,我也会对更有效的非内置方法感兴趣.

matlab multidimensional-array

3
推荐指数
2
解决办法
106
查看次数