小编Sam*_*adt的帖子

Scheme/Racket中的静态变量?

在C中,您可以在方法中拥有一个静态变量,该变量可以记住先前调用该方法所设置的值.我听说在Scheme中使用continuation可以找到相同的效果.任何人都可以告诉我如何在不使用变异的情况下为Scheme中的函数创建静态变量的类似效果?

scheme continuations static racket

3
推荐指数
1
解决办法
2220
查看次数

使用Racket访问文件

我想制作一个DrRacket程序,可以复制给定目录中的所有文件(将其从USB摄像头中取出(当它被插入它被视为大容量存储设备时))并将它们粘贴到我计算机上的硬盘文件夹中驾驶.无论出于何种原因,我都无法弄清楚DrRacket在计算机上的路径实现(即,对于Windows机器上的桌面,它将是:)C:\Users\Mike\Desktop我阅读了帮助台但仍无法解决这个问题.关于我应该在哪里找清楚我的困惑的任何建议?我认为我需要实现这个想法的函数调用是:

(copy-directory/files src dst)
Run Code Online (Sandbox Code Playgroud)

在我弄明白之后,我将在GUI上工作,因此只需点击一下按钮即可运行.

scheme racket

3
推荐指数
1
解决办法
224
查看次数

如何在Racket中使用合同

我在Racket中写了一个免费乘法携带的PRNG.我想用来provide限制只访问我的库中的某些功能,并对它们施加合同.使用Racket文档(上面链接),我已将以下代码放在我的文件顶部:

(require data/queue)
(provide 
 (contract-out
  (make-cmwc-gen (-> (listof integer?) integer? integer? integer? procedure?))
  (make-default-cmwc-gen (-> integer? procedure?))
  (make-cmwc-gen-raw (-> queue? integer? integer? integer? procedure?))
  (init-cmwc-seed (-> integer? queue?)))) 
Run Code Online (Sandbox Code Playgroud)

但是当我在DrRacket中运行该文件时,我收到以下错误:

. contract-out: not a provide sub-form in: (contract-out (make-cmwc-gen (-> (listof 
integer?) integer? integer? integer? procedure?)) (make-default-cmwc-gen (-> integer?   
procedure?)) (make-cmwc-gen-raw (-> queue? integer? integer? integer? procedure?)) 
(init-cmwc-seed (-> integer? queue?)))
Run Code Online (Sandbox Code Playgroud)

代码抛出没有错误,否则在DrRacket中运行时没有插入上面的代码.

限制只访问源文件之外的某些功能以及在Racket中强制执行合同的正确方法是什么?

contract prng racket

3
推荐指数
1
解决办法
568
查看次数

Scheme - infinte循环和内存

我有这个功能:

((lambda (x) (x x))
 (lambda (x) (x x)))
Run Code Online (Sandbox Code Playgroud)

它会产生无限循环.我的问题是关于记忆图.我们知道堆栈会溢出,因为我每次调用都会打开一个新帧.但是什么会在堆上?据我所知,在每次调用时都会在堆上创建一个新的闭包,但我不确定.

scheme

3
推荐指数
1
解决办法
131
查看次数

如何导出函数segs?

如何构造segs返回列表中所有连续段列表的函数?例如,(segs '(l i s t))应该产生以下答案:

(() (t) (s) (s t) (i) (i s) (i s t) (l) (l i) (l i s) (l i s t))
Run Code Online (Sandbox Code Playgroud)

我对如何按照HtDP中描述的设计原则解决这个问题特别感兴趣(不,这不是书中的问题,所以请随时讨论它!)如何解决?在程序推导中使用哪些原则?

recursion recurrence scheme functional-programming racket

3
推荐指数
1
解决办法
138
查看次数

Racket - 输出列表的内容

我已经定义了一个列表(在Racket/Scheme中):

(define myList (cons 'data1 (cons 'data2 (cons 'data3 (cons 'data4 empty)))))
Run Code Online (Sandbox Code Playgroud)

要么

(list 'data1 'data2 'data3 'data4)
Run Code Online (Sandbox Code Playgroud)

我想写一个循环遍历列表并输出列表所有值的函数.

(define (outputListData list)
  (cond 
    [(null? list) list]
    [else (getListData)]))
Run Code Online (Sandbox Code Playgroud)

我可以通过什么功能循环浏览列表的内容?我知道可以使用first&rest来获取列表数据,但我想这不是正确的方法.

顺便说一句:有没有像php.net这样的好的,紧凑的球拍参考?我发现官方的Racket文档非常令人困惑......

lisp recursion scheme list racket

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

在Racket中eval中允许的标识符重复定义?

在DrRacket中使用Racket时,我意外地进入了交互窗口.

(定义x 7)
(定义x 8)

并且DrRacket允许它,即我没有得到"标识符错误消息的重复定义".

因此,要尝试找出发生了什么,然后在DrRacket的定义窗口中输入:

代码段A

(define-namespace-anchor a)  
(define ns (namespace-anchor->namespace a))  
(eval '(begin (define x 7) (define x 8)) ns)  
(eval 'x ns)  
Run Code Online (Sandbox Code Playgroud)

仍然没有"重复定义错误".

然后我在定义窗口中尝试了这个:

代码段B

(define x 9)  
(define-namespace-anchor a)  
(define ns (namespace-anchor->namespace a))  
(eval '(begin (define x 7) (define x 8)) ns)  
(eval 'x ns)  
Run Code Online (Sandbox Code Playgroud)

我收到了错误消息:cannot redefine a constant x.

有人可以向我解释为什么在定义窗口中的代码片段A(并且只是在交互窗口中输入 (define x 7) 后面(define x 8))不会给我一个重复的定义错误.

scheme racket

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

我正在阅读SICP并尝试跟进,但为什么我在网上找到的Lisp解释器失败了DEFINE关键字?

这是书......

http://mitpress.mit.edu/sicp/full-text/book/book.html

知道我应该使用哪个解释器来处理这里提供的代码吗?

到目前为止,我尝试了一些在线和下载Lisp解释器,当我尝试使用DEFINE时,我得到的只是错误.

例:

从这一部分:http://mitpress.mit.edu/sicp/full-text/book/book-ZH-10.html#%_sec_1.1

放在这里:http://www.ugcs.caltech.edu/~rona/tlisp/

> (define (square x) (* x x))
*** EVAL Error: Function 'DEFINE' is not defined. ***
Run Code Online (Sandbox Code Playgroud)

还尝试使用具有类似结果的'lispbox'.

啊哈:http : //sisc-scheme.org/sisc-online.php工作,谢谢你的提示blabla999,很快就会接受回答.

进一步研究:Scheme!= Common Lisp

lisp sicp

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

如何使用DrRacket 5.2.1在Emacs中编辑和运行PLAI代码

我正在学习PLAI,现在我已经在DrRacket(带#lang plai)中运行了第3章的代码,但我是DrRacket的新手.我可以仅在Emacs中编辑和运行代码吗?

scheme racket plai

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

在计划中折叠权利

我正在使用DrRacket作为方案编译器.当我尝试使用fold-right函数时,我得到了"fold-right:模块中的未绑定标识符:fold-right".在调用此函数之前是否需要包含一些库?

谢谢!

scheme module racket

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