你好我正在为Game Boy写一个模拟器.
我用这个参考:Gameboy CPU(LR35902)指令集
该文件说明了操作码:
0xE2 LD (C),A
Run Code Online (Sandbox Code Playgroud)
和
0xF2 LD A,(C)
Run Code Online (Sandbox Code Playgroud)
长度为2.
该游戏男孩CPU手册说分别,这些说明:
将地址$ FF00 +寄存器C的值放入A.
和
将A放入地址$ FF00 +寄存器C.
我认为它的长度为1,因为操作码是自给自足的,它不需要另外的值来解释.如果它的长度为2,那么第二个字节的目的是什么?
我正在用Greg Michaelson的"通过Lambda微积分进行功能编程简介"一书中学习lambda演算.
我仅使用该语言的一个子集在Clojure中实现示例.我只允许:
到目前为止,我有这些功能:
(def identity (fn [x] x))
(def self-application (fn [s] (s s)))
(def select-first (fn [first] (fn [second] first)))
(def select-second (fn [first] (fn [second] second)))
(def make-pair (fn [first] (fn [second] (fn [func] ((func first) second))))) ;; def make-pair = ?first.?second.?func.((func first) second)
(def cond make-pair)
(def True select-first)
(def False select-second)
(def zero identity)
(def succ (fn [n-1] (fn [s] ((s False) n-1))))
(def one (succ zero))
(def zero? (fn …Run Code Online (Sandbox Code Playgroud) 我真的不明白这个宏是什么.
(def n 12)
=> #'lambda.core-test/n
#'n
=> #'lambda.core-test/n
(= #'n n)
=> false
(= #'n #'n)
=> true
(= 12 #'n)
=> false
Run Code Online (Sandbox Code Playgroud)
我读的地方,#'x是一样的(var x)所以
(var n)
=> #'lambda.core-test/n
(var-get (var n))
=> 12
Run Code Online (Sandbox Code Playgroud)
人们似乎在重新评估时使用它,符号的定义在REPL中不起作用.
这个宏到底是什么以及它与重新评估有什么关系?
我不明白如何获得完整的宏扩展.
有了这段代码
(when true (when true true))
Run Code Online (Sandbox Code Playgroud)
我想得到完整的宏扩展
(if true (do (if true (do true)))
Run Code Online (Sandbox Code Playgroud)
但我不能
我理解macroexpansion-1将解决第一级扩展:
(macroexpand-1 '(when true (when true true)))
(if true (do (when true true)))
Run Code Online (Sandbox Code Playgroud)
但是为什么当我再次打电话时macroexpand-1(那应该做什么macroexpand):
(macroexpand-1 '(if true (do (when true true))))
Run Code Online (Sandbox Code Playgroud)
我得到了完全相同的结果?
(if true (do (when true true)))
Run Code Online (Sandbox Code Playgroud)
我期待完整的宏观扩张.
宏扩展只适用于顶级表单吗?
我知道命名空间中的一个expand-all函数clojure.walk,所以我认为macroexpand它不适用于嵌套结构.我对吗 ?
我需要将一些PDF转换回文本。我尝试了许多软性和在线工具,结果总是中等。
从技术上讲为什么如此困难?