我正在使用DrScheme编写一个Scheme解释器.我定义了一个Read Eval Print Loop,我正在重新定义eval过程.这在Chez Scheme等其他方案实现中效果很好,但我不喜欢Chez Scheme中的代码编辑,所以我想使用DrScheme.
当我做出如下定义:(define(eval exp env)(cond ...))它说:define-values:不能改变常量标识符:eval
有没有办法覆盖它,让我改变常量标识符?我宁愿不必重命名所有变量来解决这个问题.
在Scheme中编写自动记忆器时,我遇到了一些问题.
我有一个工作的memoizer函数,它创建一个哈希表并检查该值是否已经计算.如果它在之前已经计算过,则返回值,否则它将调用该函数.
(define (memoizer fun)
(let ((a-table (make-hash)))
(?(n)
(define false-if-fail (?() #f))
(let ((return-val (hash-ref a-table n false-if-fail)))
(if return-val
return-val
(begin
(hash-set! a-table n (fun n))
(hash-ref a-table n)))))))
Run Code Online (Sandbox Code Playgroud)
现在我想创建一个memoize-wrapper函数,如下所示:
(define (memoize-wrapper function)
(set! function (memoizer function)))
Run Code Online (Sandbox Code Playgroud)
并希望创建一个名为def-memo的宏,它使用memoize-wrapper定义函数.例如.宏可以扩展为(memoizer(定义函数名称参数body ...)或类似的东西.
所以我应该能够做到:
(def-memo (factorial n)
(cond
((= n 1) 1)
(else (* n (factorial (- n 1))))))
Run Code Online (Sandbox Code Playgroud)
这应该创建一个memialized版本的阶乘而不是正常的慢阶段.
我的问题是
非常感谢.
我很惊讶PLTScheme中的"错误"功能.如果我有一个除零,它不会做任何其他递归,只是从调用堆栈出来并给我一个错误.
在所有功能之前是否存在隐含的延续?错误是否会丢弃调用堆栈?有没有人对此有任何想法?
我意识到这是一个总的n00b问题,但我很好奇,我想我可能会在这里获得比其他任何地方更好的解释.这是一个列表(我正在使用Dr. Scheme)
> (list 1 2 3)
(1 2 3)
Run Code Online (Sandbox Code Playgroud)
我认为这只是糖:
> (cons 1 (cons 2 (cons 3 null)))
(1 2 3)
Run Code Online (Sandbox Code Playgroud)
另一方面,这做了其他事情:
> (cons 1 (cons 2 3))
(1 2 . 3)
Run Code Online (Sandbox Code Playgroud)
我的问题是,为什么会有所不同?要求列表末尾的空值有什么意义?
通过两本Schemer书籍后,我即将开始使用HtDP,但也发现了http://docs.plt-scheme.org/guide材料.
看起来,前面提到的书籍更倾向于Scheme,后者更适合PLT特定的扩展(模块,需求,括号语法等......).在线手册非常好,但我希望有可能购买的书籍表格?
如果没有,我当然感谢深入的在线手册 - 只是好奇!
自从我触及Scheme并决定使用Scheme实现命令行收入分配器已经有几个月了.
我的初始实现使用了对延续的简单递归,但我认为延续更适合这种类型的程序.我很感激,如果有人(比我更熟练的方案)可以看看这个并提出改进建议.我是多(display...行也是使用宏的理想机会(我还没有得到宏).
(define (ab-income)
(call/cc
(lambda (cc)
(let
((out (display "Income: "))
(income (string->number (read-line))))
(cond
((<= income 600)
(display (format "Please enter an amount greater than $600.00~n~n"))
(cc (ab-income)))
(else
(let
((bills (* (/ 30 100) income))
(taxes (* (/ 20 100) income))
(savings (* (/ 10 100) income))
(checking (* (/ 40 100) income)))
(display (format "~nDeduct for bills:---------------------- $~a~n" (real->decimal-string bills 2)))
(display (format "Deduct for taxes:---------------------- $~a~n" (real->decimal-string taxes 2)))
(display (format "Deduct for …Run Code Online (Sandbox Code Playgroud) 为了为我的程序构建安装程序,我添加了一个"安装程序"Xcode项目/目标,它将所有需要的二进制文件复制到一个临时位置,然后运行必要的逻辑来构建程序包.
我遇到的问题是我想直接映射这个安装程序项目依赖于其他一些项目,以便每次我尝试构建安装程序项目时都构建它们(如果需要).
我将所有目标添加到安装程序的构建目标列表(在架构中),并按如下顺序排列:
Project A
Project B
Project C
Installer (self)
Run Code Online (Sandbox Code Playgroud)
但是当我做一个干净的构建时,我看到一个构建顺序(在构建日志中),如下所示:
Project C
Installer
Project A
Project B
Run Code Online (Sandbox Code Playgroud)
我需要强制执行某个构建顺序,否则安装程序将无法使用这些文件.XCode允许您在UI中更改这些项目的顺序,但顺序似乎没有做任何事情.有没有办法强制依赖的构建顺序?
任何人都知道racket/base语言中包含的内容.我希望将racket/base命名空间定义与R7RS草案进行比较,以便直接了解Racket与Scheme的不同之处.
我的 Android 应用程序应该与我们的网站进行交互,进行一些流式传输。如果用户没有安装该应用程序,我们会提供一个网页,告知该应用程序以及下载该应用程序的链接。
\n\n信息页面位于: http: //my.site.no/android
\n\n所有链接都以此信息页面为前缀:http://my.site.no/android ?url=http://something.to.stream
\n\n在应用程序中,我声明了以下意图过滤器:
\n\n<intent-filter>\n <data android:scheme="http" android:host="my.site.no" android:pathPrefix="/android" />\n <action android:name="android.intent.action.VIEW" />\n <category android:name="android.intent.category.DEFAULT" />\n <category android:name="android.intent.category.BROWSABLE" />\n</intent-filter>\nRun Code Online (Sandbox Code Playgroud)\n\n这适用于大多数设备。但有些设备(特别是 Samsung Galaxy SIII\xe2\x80\x99s)拒绝注册此意图过滤器。即使安装了应用程序,用户也始终会登陆信息页面。这种情况不仅发生在标准浏览器上,同一设备上的其他浏览器(例如 Firefox 和 Chrome)也会发生这种情况。拒绝注册意图的设备上没有处于活动状态的 \xe2\x80\x9cdefault app\xe2\x80\x9d 设置。
\n\n知道可能出了什么问题吗?或者如何尝试调试以找到原因?
\n我遇到了一个问题,如果我在远程系统上以守护进程模式启动 Emacs,然后在我的本地系统中运行ssh remotehost emacsclient -c,它会失败,并且由于身份验证错误而导致 X11 连接被拒绝。 然而,诸如此类的事情ssh remotehost xterm工作正常,所以它与 ssh 连接、X 转发等无关。
有问题的两个系统都运行 Ubuntu 18.04 LTS。
可以猜到,问题是 xauth,特别是在阅读了 2010/2011 年提交的问题后,这似乎是由于 GDM 将环境XAUTHORITY变量设置为$XDG_RUNTIME_DIR/gdm/Xauthority(类似于/run/user/1000/gdm/Xauthority)的方式,而传入的 SSH 连接则不然XAUTHORITY在为 SSH 会话设置 xauth cookies 之前设置。
这意味着 ssh xauth cookie 将添加到默认$HOME/.Xauthority文件中。我的 Emacs 守护进程无法看到这些 cookie,因为它正在使用 GDM$XDG_RUNTIME_DIR/gdm/Xauthority文件。
正如我所说,这种差异似乎已经是一个已知问题 8 年多了……没有人解决它吗?疯狂的。我已经编写了一个安装 cookie 的脚本,但必须这样做是相当恶心的。
有没有办法让我的 ssh 会话使用 GDM Xauthority 文件?我已经尝试XAUTHORITY在 shell 设置中进行设置,但显然设置得太晚了,在 SSH 守护程序配置新的 Xauth cookie 之后,因为它仍然放入$HOME/.Xauthority.
racket ×7
scheme ×7
android ×1
dependencies ×1
emacs-server ×1
emacsclient ×1
gdm ×1
installer ×1
intentfilter ×1
macros ×1
project ×1
r7rs ×1
ssh ×1
url-scheme ×1
xcode ×1