大多数提交都有 1 个父提交。但是,一些提交有多个父级。例如,在--no-ff(无快进)标志下创建的合并提交至少有 2 个父项。
git 中是否有一个命令可以显示特定提交具有的确切父级数量?
我在 Emacs 中使用 Common Lisp 和 Slime。与使用突变相比,我有更多避免突变的经验。
在 REPL 中,我可以执行以下操作:
CL-USER> (defvar so-example '())
SO-EXAMPLE
CL-USER> (push 7 so-example)
(7)
Run Code Online (Sandbox Code Playgroud)
它有效。但是,如果我尝试:
CL-USER> (push 7 '())
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息说:
未定义的函数:(SETF QUOTE)
好的。由于quote是一个问题,我也尝试过:
CL-USER> (push 7 nil)
Run Code Online (Sandbox Code Playgroud)
这也会引发错误消息:
NIL 是一个常量,因此不能设置。
为什么会发生这种情况?为什么说有道理?
对我来说,这很奇怪。
我正在使用 Slime (Emacs) 和 Common Lisp (SBCL)。计算表达式后,REPL 返回 CL 对象列表:
(#<BOOKMARK-ENTRY {1009AFB963}> #<BOOKMARK-ENTRY {1009AFD5A3}>
#<BOOKMARK-ENTRY {1009AFDB53}> #<BOOKMARK-ENTRY {1009AFE0E3}>
#<BOOKMARK-ENTRY {1009AFE683}> #<BOOKMARK-ENTRY {1009AFEC23}>
#<BOOKMARK-ENTRY {1009AFF173}> #<BOOKMARK-ENTRY {1009AFF753}>
#<BOOKMARK-ENTRY {1009AFFCD3}> #<BOOKMARK-ENTRY {1009B00233}>
#<BOOKMARK-ENTRY {1009B00783}> #<BOOKMARK-ENTRY {1009B00CE3}>
#<BOOKMARK-ENTRY {1009B01253}> #<BOOKMARK-ENTRY {1009B01823}>
#<BOOKMARK-ENTRY {1009B01DD3}> #<BOOKMARK-ENTRY {1009B02393}>
#<BOOKMARK-ENTRY {1009B028B3}> #<BOOKMARK-ENTRY {1009B02E13}>
#<BOOKMARK-ENTRY {1009B03373}> #<BOOKMARK-ENTRY {1009B03903}>
#<BOOKMARK-ENTRY {1009B03EB3}> #<BOOKMARK-ENTRY {1009B04453}>
#<BOOKMARK-ENTRY {1009B049F3}> #<BOOKMARK-ENTRY {1009B04F23}>
#<BOOKMARK-ENTRY {1009B054A3}> #<BOOKMARK-ENTRY {1009B05AB3}>
#<BOOKMARK-ENTRY {1009B05FF3}> #<BOOKMARK-ENTRY {1009B06513}>
#<BOOKMARK-ENTRY {1009B06A83}> #<BOOKMARK-ENTRY {1009B07133}>
#<BOOKMARK-ENTRY {1009B076B3}> #<BOOKMARK-ENTRY {1009B07C13}>
#<BOOKMARK-ENTRY {1009B08213}>)
Run Code Online (Sandbox Code Playgroud)
如果我单击检查列表,则会打开一个新窗口,其中列出了所有对象:
#<CONS {1009AFCBB7}>
-------------------- …Run Code Online (Sandbox Code Playgroud) 我想从一个简单的列表转换:
'(1 2 3)
Run Code Online (Sandbox Code Playgroud)
到一维数组(向量):
#(1 2 3)
Run Code Online (Sandbox Code Playgroud)
我发现这个问题很相似,但没有涵盖这个问题。
我也设法找到了实现它的方法。不确定它是否是最好的:
CL-USER> (coerce '(1 2 3) 'vector)
#(1 2 3)
CL-USER> (type-of *)
(SIMPLE-VECTOR 3)
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以使用make-array来达到相同的结果。我试过:
CL-USER> (make-array '() :initial-contents '(1 2 3))
#0A(1 2 3)
CL-USER> (type-of *)
(SIMPLE-ARRAY T NIL)
Run Code Online (Sandbox Code Playgroud)
这是接近的,但我不明白#0A在#0A(1 2 3)。
出于某种我不明白的原因,此输出不适用于进一步的组合,例如aref:
CL-USER> (aref #0A(1 2 3) 0)
; Evaluation aborted on #<SIMPLE-ERROR "Wrong number of subscripts, ~W, for array of rank ~W." {1003C07793}>.
Run Code Online (Sandbox Code Playgroud)
Is it possible …
我正在尝试通过《Common Lisp:符号计算的温和介绍》一书来学习 Common Lisp 。此外,我正在使用 SBCL、Emacs 和 Slime。
在第 7 章中,作者提出以下建议lambda expressions:

这让我感到困惑,因为 SBCL 的 REPL 返回:
CL-USER> #'lambda
#<CLOSURE (:MACRO LAMBDA) {1000D736DB}>
Run Code Online (Sandbox Code Playgroud)
显然,作者使用了Lisp Works(不是 100% 确定)。我认为这与上述差异无关。不过,我觉得还是提一下比较好。
我的 SBCL 的 REPL 也返回macro了众所周知的宏,例如and:
CL-USER> #'and
#<CLOSURE (:MACRO AND) {1000D7365B}>
Run Code Online (Sandbox Code Playgroud)
请注意,具有“普通”功能的行为例如append是不同的:
CL-USER> #'append
#<FUNCTION APPEND>
Run Code Online (Sandbox Code Playgroud)
这里的这篇文章似乎稍微触及了lambda 表达式的非单一性质。但是,它没有提到任何有关标记的内容。
我是否遗漏了 lambda 表达式的本质?
我不明白 的行为git merge。有时,我合并一个分支,执行后git log --graph,我可以看到分支合并为绘图,如下所示:
D \n / \\\n C B\n \\ /\n A\nRun Code Online (Sandbox Code Playgroud)\n我已经做了
\n$ git merge feature1 develop \nUpdating 4c3dd3e..a90a849 Fast-forward \nfileA.txt | 1 + 1 file changed, 1 insertion(+)\nRun Code Online (Sandbox Code Playgroud)\n有用。我什至可以删除主题分支,这表明该分支不再是不可或缺的并且合并成功:
\n$ git branch -d feature1 \nDeleted branch feature1 (was a90a849).\nRun Code Online (Sandbox Code Playgroud)\n但是,我看不到图纸。我只有一行:
\npedro (develop) second-final-project $ git log --graph \n\n* commit a90a84966040e36b994c0146bbd8a666954bee49 (HEAD -> develop)\n| Author: Pedro Delfino <p.delfino01@gmail.com>\n| Date: Fri Jul 16 12:29:24 2021 -0300\n| \n| …Run Code Online (Sandbox Code Playgroud) 我正在阅读Sonja Keene 的《Common Lisp 中的面向对象编程》一书。
在第七章中,作者提出:
(class-name class-object)
Run Code Online (Sandbox Code Playgroud)
这使得查询类对象的名称成为可能。
使用 SBCL 和 SLIME 的 REPL,我尝试了:
; SLIME 2.26.1
CL-USER> (defclass stack-overflow ()
((slot-1 :initform 1 )
(slot-2 :initform 2)))
#<STANDARD-CLASS COMMON-LISP-USER::STACK-OVERFLOW>
CL-USER> (make-instance 'stack-overflow)
#<STACK-OVERFLOW {1002D188E3}>
CL-USER> (defvar test-one (make-instance 'stack-overflow))
TEST-ONE
CL-USER> (slot-value test-one 'slot-1)
1
CL-USER> (class-name test-one)
; Evaluation aborted on #<SB-PCL::NO-APPLICABLE-METHOD-ERROR {10032322E3}>.
Run Code Online (Sandbox Code Playgroud)
上面的代码返回以下错误消息:
There is no applicable method for the generic function
#<STANDARD-GENERIC-FUNCTION COMMON-LISP:CLASS-NAME (1)>
when called with arguments
(#<STACK-OVERFLOW {1003037173}>).
[Condition of type …Run Code Online (Sandbox Code Playgroud) 我正在阅读 Sonja Keene 所著的《Common Lisp 中的面向对象编程》一书。
在第9章中,作者给出了以下示例:
(defclass window ()
((x :initarg :x-position :accessor x-position)
(y :initarg :y-position :accessor y-position)
(height :initarg :height :accessor window-height)
(width :initarg :width :accessor window-width)
(exposed-p :initform nil :accessor exposed-p))
(:documentation "Foundation of all windows"))
Run Code Online (Sandbox Code Playgroud)
我知道在谈论包时,Common Lisp 中使用:或::不使用它超出了纯粹的符号范围。它的使用背后有一个逻辑!
但是,我看不到使用:槽选项/说明符背后的逻辑。例如,考虑上面的例子。
看第一个插槽,x. 有:initarg与 关联的插槽选项:x-position。好的,两者都包括:.
现在,在同一个插槽上,查看:accessor插槽选项。它包括双点:。但是,x-position与之相关的不包括:.
这个语法背后有一些逻辑吗?
我最好的假设是语法设计是用来反映处理实例时时刻的差异。因此,缺少双点将表明与 pos 初始化相关的使用,并且包含双点将与正在进行的初始化过程相关:
CL-USER> …Run Code Online (Sandbox Code Playgroud) 我正在使用 Clojure、Emacs 和 Cider。
在 Cider REPL 中,该type函数返回以下内容:
user> (type true)
java.lang.Boolean
user> (type '(1 2))
clojure.lang.PersistentList
user> (type nil)
nil
Run Code Online (Sandbox Code Playgroud)
从更高层次的理解,我知道Clojure和Java之间存在集成。我认为这是 Clojure 导入 Java 库的一种方式。但是,联系似乎不止于此。
但是,为什么type有时会提到 Java 语言呢?为什么它引用了 Clojure 语言?为什么有时它根本没有提及任何语言(nil)?
我正在观看 Eric Normand 的前端课程/教程。\n课程是付费私人服务。
\n但是,他正在使用 GitHub 上的公共存储库,this\none。
\n克隆并执行后lein fig-dev,该项目似乎已成功构建:
2022-08-25 13:46:47.988:INFO::main: Logging initialized @3006ms to org.eclipse.jetty.util.log.StdErrLog\n[Figwheel] Validating figwheel-main.edn\n[Figwheel] figwheel-main.edn is valid \\(\xe3\x83\x84)/\n[Figwheel] Compiling build dev to "resources/public/js/compiled/app.js"\n[Figwheel] Successfully compiled build dev to "resources/public/js/compiled/app.js" in 1.33 seconds.\n[Figwheel] Watching paths: ("src") to compile build - dev\n[Figwheel:SEVERE] /private/var/folders/fh/7d_1drwd2ps3zw03j9ftkqs80000gn/T/jna1153974339277798676.tmp: dlopen(/private/var/folders/fh/7d_1drwd2ps3zw03j9ftkqs80000gn/T/jna1153974339277798676.tmp, 0x0001): tried: \'/private/var/folders/fh/7d_1drwd2ps3zw03j9ftkqs80000gn/T/jna1153974339277798676.tmp\' (fat file, but missing compatible architecture (have (unknown,i386,x86_64), need (arm64e)))\n[Figwheel] Starting Server at http://localhost:3449\n[Figwheel] Starting REPL\nPrompt will show when REPL connects to evaluation …Run Code Online (Sandbox Code Playgroud) common-lisp ×6
clojure ×2
git ×2
oop ×2
arrays ×1
class-names ×1
clos ×1
figwheel ×1
git-commit ×1
git-log ×1
git-merge ×1
lambda ×1
leiningen ×1
lisp-macros ×1
list ×1
markers ×1
slime ×1
syntax ×1
types ×1
vector ×1