小编Eli*_*lay的帖子

如何在DrScheme中重新定义常量标识符?

我正在使用DrScheme编写一个Scheme解释器.我定义了一个Read Eval Print Loop,我正在重新定义eval过程.这在Chez Scheme等其他方案实现中效果很好,但我不喜欢Chez Scheme中的代码编辑,所以我想使用DrScheme.

当我做出如下定义:(define(eval exp env)(cond ...))它说:define-values:不能改变常量标识符:eval

有没有办法覆盖它,让我改变常量标识符?我宁愿不必重命名所有变量来解决这个问题.

scheme racket

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

在Scheme中编写自动记忆器.帮助宏和包装

在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版本的阶乘而不是正常的慢阶段.

我的问题是

  1. memoize-wrapper工作不正常,它不会调用memoized函数而是调用原始函数.
  2. 我不知道如何在宏内部编写一个定义.我如何确保我可以获得变量长度参数和可变长度体?然后我如何定义函数并用memoizer包装它?

非常感谢.

macros scheme functional-programming racket

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

PLTScheme如何捕获错误?

我很惊讶PLTScheme中的"错误"功能.如果我有一个除零,它不会做任何其他递归,只是从调用堆栈出来并给我一个错误.

在所有功能之前是否存在隐含的延续?错误是否会丢弃调用堆栈?有没有人对此有任何想法?

scheme continuations racket

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

为什么你必须使用null来获得一个正确的方案列表?

我意识到这是一个总的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)

我的问题是,为什么会有所不同?要求列表末尾的空值有什么意义?

scheme racket

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

PLT-Scheme学习参考

通过两本Schemer书籍后,我即将开始使用HtDP,但也发现了http://docs.plt-scheme.org/guide材料.

看起来,前面提到的书籍更倾向于Scheme,后者更适合PLT特定的扩展(模块,需求,括号语法等......).在线手册非常好,但我希望有可能购买的书籍表格?

如果没有,我当然感谢深入的在线手册 - 只是好奇!

scheme racket

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

实用方案编程

自从我触及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)

scheme continuations racket

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

在XCode方案构建目标中构建排序

为了为我的程序构建安装程序,我添加了一个"安装程序"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中更改这些项目的顺序,但顺序似乎没有做任何事情.有没有办法强制依赖的构建顺序?

installer xcode dependencies project

5
推荐指数
2
解决办法
4890
查看次数

球拍/基础命名空间

任何人都知道racket/base语言中包含的内容.我希望将racket/base命名空间定义与R7RS草案进行比较,以便直接了解Racket与Scheme的不同之处.

scheme racket r7rs

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

Android Intent-filter 在某些设备上未使用 android: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>\n
Run 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

android url-scheme intentfilter

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

在 GDM 和 SSH 之间协调 .Xauthority

我遇到了一个问题,如果我在远程系统上以守护进程模式启动 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.

ssh emacsclient x11-forwarding emacs-server gdm

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