小编Kaz*_*Kaz的帖子

git:为樱桃选择获得`git rebase --interactive`的好处

我希望能够这样做:

git cherry-pick --interactive hash-0..hash-n-1  # fantasy command
Run Code Online (Sandbox Code Playgroud)

并获得与交互式rebase相同的工作流程:出现一个编辑器缓冲区,其中包含:

pick hash-0
pick hash-1
pick hash-2
...
pick hash-n-1
Run Code Online (Sandbox Code Playgroud)

在哪里我可以删除任何不需要的提交,squash它们在一起,或edit在选择之间暂停以做一些手动修复(如commit --amend)和所有这些.

请注意pick交互式rebase 如何像tanalizing一样cherry-pick.

现在可以通过首先执行樱桃选择,然后执行交互式基数来完成上述操作,这是不方便的.那是:

$ git tag old-head  # mark starting point for later rebase
$ git cherry-pick hash-0..hash-n-1    # get everything first
$ git rebase --interactive old-head   # okay now rebase "in-branch" to fix it up
Run Code Online (Sandbox Code Playgroud)

这不仅因为这两个步骤而不方便,而且因为它可能需要解决提交中的冲突,您甚至不希望在rebase阶段将其丢弃.

git

21
推荐指数
2
解决办法
4804
查看次数

如何在JavaScript中生成滴答声?

在a.bestmetronome.com上,他们有一个节拍器,该节拍器会根据噪音产生滴答声。

但是,我不知道如何产生“滴答声”。尽管我能够通过Audacity找出“ tick”生成器:

;; Metronome tick by Steve Daulton.
(defun metronome-tick (hz peak)
    (let* ((ln 300)
        (sig-array (make-array ln))
        (x 1))
    ;; generate some 'predictable' white noise
    (dotimes (i ln)
        (setf x (rem (* 479 x) 997))
        (setf (aref sig-array i) (- (/ x 500.0) 1)))
        (setf sig (sim (s-rest-abs 0.2)
            (snd-from-array 0 44100 sig-array)))
    (setf sig
        (mult (abs-env (pwev 10 (/ ln 44100.0) 2 1 0))
            (highpass8  (lowpass2 sig (* 2 hz) 6)
                        hz)))
    (let ((gain (/ (peak sig …
Run Code Online (Sandbox Code Playgroud)

javascript html5-audio nyquist audiocontext

6
推荐指数
1
解决办法
255
查看次数

将存储转换为#ifdef SYM分隔的工作更改

我有一组stash@{4}我想要应用的更改,但是以这样的方式将更改合并到工作副本(或者新的提交)中,以便可以通过预处理器符号选择任一版本.

(这是GNU diff和diff3程序的一个特性:请参阅--ifdef选项.)

比如像一个大块头

@@ -123,7 +123,7 @@
 a
 b
 c
-foo
+bar
 d
 e
 f
Run Code Online (Sandbox Code Playgroud)

实际上应用于工作文件

a
b
c
#ifdef SYM
bar
#else
foo
#endif
d
e
f
Run Code Online (Sandbox Code Playgroud)

如果SYM已定义,则文本对应于修补版本,而如果未定义,则文本将扩展为基本版本.

也许,这是可以做到的git merge,不知何故,告诉git使用diff3 --ifdef=SYM的合并?

git

5
推荐指数
1
解决办法
314
查看次数

如何在Haskell中编写lisp解析器?

我正在尝试在haskell中编写一个lisp解释器,受到Norvig在Python中的启发(http://norvig.com/lispy.html).我有一个成功的标记器,如果需要我可以链接到它.在这里,它输出正确的代码到Norvig的Python标记器.

program = "(begin (define r 10) (* pi (* r r)))"
astTokenized = tokenize program
astTokenized == ["(","begin","(","define","r","10",")","(","*","pi","(","*","r","r",")",")",")"]
Run Code Online (Sandbox Code Playgroud)

这里我定义了我的抽象语法树数据类型,虽然我知道它已经有一些隐式错误,因为它没有包含在列表中.

data Ast x = Val x | Node [Ast x] deriving (Show)
Run Code Online (Sandbox Code Playgroud)

这是我的第一次尝试:

parse :: [[Char]] -> [Ast [Char]]
parse (x:xs)
  | x == "(" = [Node (parse xs)]
  | x == ")" = []
  | otherwise = (Val x) : parse xs
Run Code Online (Sandbox Code Playgroud)

希望,除了它在第一个')之后终止.

Prelude> parse astTokenized
[Node [Val "begin",Node [Val "define",Val "r",Val "10"]]]
Run Code Online (Sandbox Code Playgroud)

这里我改变了[]的基本情况,并调整了')'的条件,因此它将解析整个输入终止,但它现在只创建一个更深的树,因此无法正确分支.

parse [] = …
Run Code Online (Sandbox Code Playgroud)

parsing haskell compilation

5
推荐指数
1
解决办法
409
查看次数

如何获得算术中忘记转换的警告?

考虑这种情况:

uint64_t add(uint32_t a, uint32_t b)
{
   return a + b; // programmer neglected (uint64_t) a + b.
}
Run Code Online (Sandbox Code Playgroud)

我们如何让 GCC(或任何其他编译器)的 C 或 C++ 前端对这种情况发出警告:正在以立即变宽的窄类型完成操作?

我已经通读了当前的 GCC 文档,并尝试了各种警告,例如-Wconversion,但没有任何结果。

c c++ gcc-warning

5
推荐指数
1
解决办法
571
查看次数

LR(0)或SLR(1)或LALR(1)

我很难坚持我正在尝试从编译器的样本期末考试中提出的问题.如果有人可以帮我解释,我将非常感激.谢谢

考虑下面列出的语法G.

  1. S = E. $
  2. E = E +T | Ť
  3. T = T *F | F
  4. F = ident| (Ë)

其中+*ident()是终端符号并且$是文件的结尾.a)这个语法LR(0)?证明你的答案.b)语法单反(1)?证明你的答案.c)这个语法LALR(1)?证明你的答案.

compiler-construction parsing context-free-grammar

4
推荐指数
1
解决办法
2670
查看次数

我们如何在Apple平台的AArch64程序集中在一行中编写多条语句?

我正在将一些 Arm64 汇编语言移植到 M1。

其中一些是由 C 预处理生成的,其中单个#define宏生成多个以分号分隔的语句。

不幸的是,在 M1 上,汇编程序将分号视为注释字符。

例如:

#define DEFUN(NAME)  \
  .globl _ ## NAME ; \
  .palign 2 ;        \
  _ ## NAME:
Run Code Online (Sandbox Code Playgroud)

导致一切之后 .globl指令被视为注释。

操作系统 as手册页没有提供任何线索;它没有语法覆盖。

是否有分隔语句的替代字符?我尝试使用@and !,但都被拒绝。

这个问题的答案在这里没有用。

assembly arm64 apple-m1

4
推荐指数
1
解决办法
49
查看次数

无法添加边,IGraph 中的顶点 ID 无效

我试图使用 igraph 在 python 中编写代码,当我尝试使用 while 循环添加边缘时出现此错误

while(i<k)
  g.add_vertices(theInts[i])
  i=i+1
  g.add_edges([(theInts[i-1],theInts[i])])
Run Code Online (Sandbox Code Playgroud)

我认为索引可能是一个问题,所以我还包含了一个 if 语句,但这似乎不是问题。

请帮忙!!!

python igraph

2
推荐指数
1
解决办法
9026
查看次数

GNU Make:禁用所有内置规则,除了所需的规则

过去,GNU make 两次毁掉了我的工作,因为它的一些内置规则以.c文件为目标。

如果您有一个名为 的文件foo.c,并且还有foo.lLex 扫描器或foo.yYacc 解析器,请注意!GNU make 假设该.c文件是由这些文件组成的目标(这显然是 POSIX 要求!),并且它将执行类似mv y.tab.c foo.c或 的操作lex -t foo.l > foo.c

如何禁用所有这些隐藏的危险规则(无论已知或未知),同时保留有用的规则?

具体来说,我们如何向 GNU Make 提出此请求:“请保留与(例如).c 和 .o 文件相关的所有规则,并禁用涉及任何其他文件类型的所有规则”?

gnu-make

2
推荐指数
1
解决办法
969
查看次数