小编Sam*_*adt的帖子

在Racket结构类型上与Kleene星形匹配

我最近开始玩Racket模式匹配系统,遇到了一个我无法理解的问题.

如果我做:

(match (list 1 2 3 4 5 6 7 8 9 10 11 12)
    [(list _ x y z ...) (list y ': x)]) 
Run Code Online (Sandbox Code Playgroud)

在REPL我得到

'(3 : 2)
Run Code Online (Sandbox Code Playgroud)

作为我想要的结果.

如果我做:

(match (current-date)
    [(date* _ x y z ...) (list y ': x)])
Run Code Online (Sandbox Code Playgroud)

要么

(match (date* 5 18 13 18 11 2011 5 321 #f 3600 0 "W. Europe Standard Time")
    [(date* _ x y z ...) (list y ': x)])
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

match: wrong number for fields for structure …
Run Code Online (Sandbox Code Playgroud)

scheme racket

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

将r5rs文件包含在球拍中的另一个文件中

我的一门课程是将DrRacket用于SICP的某些部分.我们正在研究metacircular评估员,我有一个R5RS代码文件(set-car!和set-cdr!),我需要与我的工作一起使用.因为R5RS文件大约是500行,所以我更喜欢将它保存在单独的缓冲区中.如何将其包含在我的答案缓冲区的定义中?这似乎racket/include需要#lang racket,但set-car!并set-cdr!没有在该语言.

scheme sicp racket

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

Scheme(Racket) - 循环库

我有DrRacket版本5.0.2,我已经花了样3小时了寻找正确的库进行while,dolist和dotimes工作.我知道如何使用它们但我找不到合适的库.当我输入dotimes例如它告诉我未知的标识符.

PS:你必须使用define-syntax才能定义这些循环吗?我试过(require srfi/42)但它不起作用.我正在使用#lang scheme.

scheme libraries racket

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

在SICP第3.4节中实现互斥锁

当作者实现序列化程序的互斥体部分时,它们使用一个名为的列表cell.但是列表只包含一个元素,那么为什么不使用变量呢?

lisp scheme mutex sicp

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

设置的车!并用计划语言

我对这个例子的结果有点困惑:

(define mk-q
  (lambda ()
    (let ([l '(x)])
      (cons l l))))


(define q (mk-q))

q
=> ((x) x)

(set-car! (cdr q) 'y)
=> ((y) y)
Run Code Online (Sandbox Code Playgroud)

我想知道为什么两个x原子都被set-car!程序所取代(我对结果的第一个猜测是什么((x) y))?

例如:

(define mk-q2
  (lambda ()
    (let ([l '(x)])
      (cons l (cons l l)))))

(define q2 (mk-q2))
(set-car! (cdr q2) 'y)
=> ((x) y x) which fits my understanding of set-car!
Run Code Online (Sandbox Code Playgroud)

为什么x第一个例子中的两个都被替换了?

lisp scheme racket mit-scheme

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

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
查看次数

超越世界/宇宙

我以为我会尝试使用世界/宇宙无变异方法的简单GUI应用程序,但尝试自己实现'世界/宇宙'程序设计.

我下面有一个小草图,但我很快得出结论,虽然我可以使用teachpack,但我不知道如何自己实现teachpack功能.

我猜我应该使用continuation,但这似乎不是universe.rkt源代码中的方法.

我总是可以将程序填充到canvas类中(就像早期的游戏一样,像滑动一样似乎也是如此),但我真的想知道如何实现"世界/宇宙"风格的程序控制.

;;;;----
#lang racket/gui

; simple drawing program
; mousedown starts recording a list of points
; mousechanged starts recording a new list
; paint callback paints the list of lists as lines.

(define diagramframe (new frame% [label "paint"] [width 300]
                                 [height 300] [x 1000][y 300]))

;(define lines '(((0 . 0) (0 . 300) (250 . 250) (150 . 176))))
(define lines '(((0 . 0) (0 . 300) (250 . 250) (150 . 176)) 
                ((10 . 4) …
Run Code Online (Sandbox Code Playgroud)

inversion-of-control immutability racket

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