Vim多年来一直在使用,这一次我只是接受了bright and distracting the visual bell.最近有人给我看了Emacs visual bell,它只闪现了屏幕的顶部和底部线条.有谁知道如何在Vim中重现这种行为?
如果它目前不可配置,有人知道修补它有多难吗?我有一些C经验,但不熟悉codebase.
我的程序(Hartree-Fock /迭代SCF)有两个矩阵F和F',它们实际上是用两个不同的基数表示的相同矩阵.我只是失去了三个小时的调试时间,因为我不小心使用F'代替F.在C++中,类型检查器没有捕获这种错误,因为两个变量都是Eigen::Matrix<double, 2, 2>对象.
我想知道,对于Haskell/ML /等.人们,无论你是否正在编写这个程序,你都会构建一个F和F'有不同类型的类型系统?那会是什么样的?我基本上试图了解如何将一些逻辑错误外包给类型检查器.
编辑:矩阵的基础就像单位.你可以说1L或多加仑,它们都意味着同样的事情.或者,为了给出一个矢量示例,可以在笛卡尔坐标中说(0,1)或在极坐标中说(1,pi/2).但即使含义相同,数值也不同.
编辑:也许单位是错误的比喻.我不是在寻找某种记录类型,我可以指定第一个字段是升和第二个加仑,而是说这个矩阵作为一个整体,用一些其他矩阵来定义(基础),其中基础可以是任何相同维度的矩阵.例如,构造函数看起来像是mkMatrix [[1, 2], [3, 4]] [[5, 6], [7, 8]],然后将该对象添加到另一个矩阵只有当两个对象具有与其第二个参数相同的矩阵时才进行类型检查.那有意义吗?
是否有任何习惯用于从脚本中的bash函数返回多个值?
http://tldp.org/LDP/abs/html/assortedtips.html描述了如何回显多个值并处理结果(例如,示例35-17),但如果某些返回值是带空格的字符串,则会变得棘手在.
一种更有条理的返回方式是分配给全局变量,比如
foo () {
FOO_RV1="bob"
FOO_RV2="bill"
}
foo
echo "foo returned ${FOO_RV1} and ${FOO_RV2}"
Run Code Online (Sandbox Code Playgroud)
我意识到,如果我需要在shell脚本中重新入门,我可能做错了,但我仍然感到非常不舒服地抛出全局变量只是为了保持返回值.
有没有更好的办法?我更喜欢可移植性,但如果必须指定的话,它可能不是真正的限制#!/bin/bash.
今天,当我看到一个数据集,其中最小的文件是48000个字段乘1600行(几个人的单倍型,22号染色体)时,我今天刚刚迈出了我的第一个宝贝步骤进入真正的科学计算.这被认为是微不足道的.
我写Python,所以我花了最后几个小时阅读有关HDF5,Numpy和PyTable的内容,但我仍然觉得我并不是真正想要一个TB级数据集对于我作为程序员的实际意义.
例如,有人指出,对于较大的数据集,不可能将整个内容读入内存,不是因为机器内存不足,而是因为架构的地址空间不足!它让我大吃一惊.
还有什么其他的假设我一直在教室里依赖这个大的投入?我需要做些什么才能开始做或以不同的方式思考?(这不一定是Python特定的.)
我一直在尝试找到OCaml调用约定,以便我可以手动解释gdb无法解析的堆栈跟踪.不幸的是,除了一般观察之外,似乎没有任何东西用英文写下来.例如,人们会在博客上评论OCaml在寄存器中传递了许多参数.(如果某处有英文文档,我们非常感谢链接.)
所以我一直试图从ocamlopt源码中解开它.任何人都可以确认这些猜测的准确性吗?
并且,如果我对在寄存器中传递的前十个参数是对的,那么通常不可能将参数恢复到函数调用吗?在C中,如果只是向后走到正确的帧,参数仍会被推到堆栈的某个地方.在OCaml中,似乎被调用者可以自由地破坏他们的呼叫者的论点.
注册分配(来自/asmcomp/amd64/proc.ml)
为了调用OCaml函数,
要调用C函数,使用标准的amd64 C约定:
退货地址(自/asmcomp/amd64/emit.mlp)
返回地址是按照amd64 C约定推入调用帧的第一个指针.(我猜这个ret指令假定这个布局.)
例外(来自/asmcomp/linearize.ml)
代码try (...body...) with (...handler...); (...rest...)线性化如下:
Lsetuptrap .body
(...handler...)
Lbranch .join
Llabel .body
Lpushtrap
(...body...)
Lpoptrap
Llabel .join
(...rest...)
Run Code Online (Sandbox Code Playgroud)
然后像这样发出组件(右边的目的地):
call .body
(...handler...)
jmp .join
.body:
pushq %r14
movq %rsp, %r14
(...body...)
popq %r14
addq %rsp, 8 …Run Code Online (Sandbox Code Playgroud) 尽管有一些Lisp和ML的经验,但我在学习阅读和(惯用)编写Haskell时遇到了很多麻烦,因为本地风格似乎是
最后一个特别困难,因为有很多预定义的运算符,每个运算符都有自己的约定和一般语义,经常阅读Haskell成为Hoogle和:type.
是否有任何好的教程假设CS /功能概念的知识,而是专注于Haskell特定的习语?我正在寻找类似Real-World Haskell的东西,它以一个非常幼稚,明确的程序开始,然后逐渐将其转换为更惯用的风格,介绍和解释成语.但是它不是引入和解释像monad和类类这样的一般概念,而是引入特定的monad和特定的类型类,比如"但这正是Alternative monoid所做的!"
我最近开始和朋友一起阅读Paul Graham的On Lisp,我们意识到我们对reduce有不同的看法:我认为它非常清晰简洁地表达了某种递归形式; 他更喜欢非常明确地写出递归.
我怀疑我们在某些情况下是正确的而在另一种情况下是错误的,但我们不知道这条线在哪里.你何时选择一种形式而不是另一种形式,在做出这种选择时你会怎么想?
为了清楚我对reduce和显式递归的意思,这里实现了两次相同的函数:
(defun my-remove-if (pred lst)
(fold (lambda (left right)
(if (funcall pred left)
right
(cons left right)))
lst :from-end t))
(defun my-remove-if (pred lst)
(if lst
(if (funcall pred (car lst))
(my-remove-if pred (cdr lst))
(cons (car lst) (my-remove-if pred (cdr lst))))
'()))
Run Code Online (Sandbox Code Playgroud)
我害怕我开始使用Schemer(现在我们是Racketeers?)所以如果我搞砸了Common Lisp语法,请告诉我.希望即使代码不正确,这一点也很明确.
有时我必须编写代码,在执行操作和检查错误条件之间交替(例如,调用库函数,检查其返回值,继续).这通常导致长期运行,其中实际工作发生在if语句的条件下,例如
if(! (data = (big_struct *) malloc(sizeof(*data)))){
//report allocation error
} else if(init_big_struct(data)){
//handle initialization error
} else ...
Run Code Online (Sandbox Code Playgroud)
你们是怎么写这种代码的?我检查了一些样式指南,但他们似乎更关心变量命名和空格.
风格指南的链接欢迎.
编辑:如果不清楚,我不满意这种风格的易读性,并寻找更好的东西.
给出一个清单
A = [1 2 3 4 5 6]
Run Code Online (Sandbox Code Playgroud)
是否有任何惯用(Pythonic)方式迭代它就好像它一样
B = [(1, 2) (3, 4) (5, 6)]
Run Code Online (Sandbox Code Playgroud)
索引除外?感觉就像C的延续:
for a1,a2 in [ (A[i], A[i+1]) for i in range(0, len(A), 2) ]:
Run Code Online (Sandbox Code Playgroud)
我不禁觉得应该有一些聪明的黑客使用itertools或切片或其他东西.
(当然,一次两个只是一个例子;我想要一个适用于任何n的解决方案.)
编辑:在Python中一次迭代字符串2(或n)个字符,但即使是最干净的解决方案(使用zip接受)也不能很好地推广到更高的n而没有列表理解和*-notation.
不知道这里的术语,但是这将是区别eq?和equal?的差额,方案,或者== 和strncmp与C字符串; 在每种情况下,第一个将返回false为两个不同的字符串,实际上具有相同的内容,第二个将返回true.
对于Python的AST,我正在寻找后一种操作.
现在,我这样做:
import ast
def AST_eq(a, b):
return ast.dump(a) == ast.dump(b)
Run Code Online (Sandbox Code Playgroud)
这看起来很有效,但感觉就像是等待发生的灾难.谁知道更好的方法?
编辑:不幸的是,当我去比较两个AST时__dict__,这个比较默认使用单个元素的__eq__方法.AST被实现为其他AST的树,并且它们__eq__显然检查参考标识.因此,无论是直接==还是托马斯链接的解决方案.(除此之外,我也不想将每个AST节点类型子类化以插入此自定义__eq__.)