有没有人对如何在“橡皮圈”模式下(在球拍中)画画有什么指点。我不希望使用任何类型的backbuffer和flip操作。在当时,使用了XOR光栅操作。您需要在XOR模式下绘制一次线(或其他图形),要删除它,您需要再次绘制它(在XOR模式下)。当您希望用户绘制线、圆等,并通过拉伸或“橡胶粘合”来调整它们的大小时,这非常有用。Racket文档似乎表明笔%或画笔%不支持“xor”样式
谢谢。xor样式在切换到开罗IIRC后被删除。无论如何,对于这样的问题,最好是在网上提问。
如何强制此结构中的字段类型
#lang racket
(struct Car (model year))
我试过使用合同(但因为我是新手,这个合同显然不起作用…:p)
示例:这成功了,但不应该
(定义我的车(car 2008“A3”)
遗憾的是,它似乎没有写在任何地方如何做到这一点。我认为你至少击中了一个,也许是以下两个:
使用(提供(外包…)意味着合同仅适用于模块边界——仅适用于需要此边界的其他模块。因此,如果您的测试示例在同一个模块中,那么契约将不适用。相反,您可以使用define/con
我想在Racket中为量子态定义一个变量,按照惯例,它是这样写的:
报告告诉我这是不可能的,因为:
|开始在分隔序列中逐字包含的字符子序列
然而,我惊讶地发现,在“球拍”一节中,该页提到:
竖条可用作其周围的标识符引用
这是一个糟糕的公式,还是球拍中的变量名实际上可以使用竖条?有人能举个例子吗
提前感谢。竖条是一种避免语言阅读器对其中字符进行常规解释的方法。因此,它可用于定义包含特殊字符的符号,例如:
(define |(| 5)
(+ |(| 1) ; produces 6
您始终
对于R5RS语言,DrRacket可以选择打开或关闭禁止重新定义初始绑定
这让我很好奇:不使用DrRacket就可以像这样调整语言设置吗?(例如,从命令行或Emacs使用Racket时)
如果是,以何种方式?如果不是,或者不是以合理的方式,原因是什么?参数编译强制模块常量控制是否允许重新定义:
soegaard$ ./racket
Welcome to Racket v6.6.0.3.
-> (compile-enforce-module-constants #f)
-> (mod
我需要解释一下为什么这个“合同外包”不起作用。
它应该只返回正值,但仍然接受负值。有人能解释一下吗?多谢各位
#lang racket
(struct account (balance))
(provide (contract-out
[balance (-> account? number?)]
[deposit (-> account? positive-num? account?)]))
(define new-account (account 0)
如何在多个阶段中访问同一变量?例如:
定义foo1
定义语法bar foo
会抱怨没有在阶段0中定义foo。这取决于您想要这个变量做什么。以下是一些选项:
您希望它是一个不可变的原始值。
您希望它是不可变的,但像结构一样的复杂数据不是基本数据。
你希望它是可变的。
在Leif Andersen的评论中,她说你真的不能,也不应该,即使你可以。我猜她说的是3。Racket编译器试图在内部Racket运行时系统中使3不可能。在Racket文档中,这称为。背后有很好的理由,为什么3是个坏主意,莱夫·安
我今天遇到了一个相当意外的行为,它完全违背了我所知道的关于球拍的可变性
#lang racket
(define num 8)
;(define num 9)
取消第二行的注释将返回错误“module:duplicate definition for identifier in:num”,这是正常的。毕竟,define应该将已经定义的值视为不可变的
然而,这对我来说毫无意义:
#lang racket
(define num 8)
num
(define define 1)
(+ def
我想要一个接受字符串的函数,由python格式的树组成,如下所示
"[0, [1, 0]]"
'(0 (1 0))
(define (py-treestringlst-to-rkt-lst treestringlst result)
(cond
[(empty? treestringlst) result]
[(char=? (car treestringlst) #\[) (append (append result
并输出一个可用的球拍列表,如下所示
&
似乎为了在Racket中使用多个返回值,我必须使用定义值,或者使用(调用值(thunk(values expr))列表)将它们收集到一个列表中。在后一种情况下,如果必须将多个值收集到一个列表中,为什么要选择返回多个值而不是一个列表?此外,这两种方法在大多数代码中都非常冗长和笨拙。我觉得我一定是误解了关于多重返回值的一些非常基本的东西。就这点而言,我如何编写一个接受多个返回值的过程?为我们提供了一个典型的示例,说明了为什么要伪装:
> (let-values ([(q r) (quotien
开发谓词a-student?,如果学生的gpa高于3.7,则返回true,并使用它来
开发函数a-students?,该函数使用学生列表,并生成所有学生的列表
gpa在3.7以上的学生。使用过滤器。如提示所示-在a-students函数中使用:
(filter (lambda (student)
(a-student? (student-GPA student)))
list-of-students)
我能做第一部分并开发谓词a-student我只是在找出如
我有以下球拍代码:
#lang racket
(define (for-each proc items)
(cond ((not (null? items))
(proc (car items))
(for-each proc (cdr items)))))
(for-each (lambda (x) (newline) (display x))
(list 57 321 88))
因为88打印出来后条件不满足,球拍的文件上写着:
如果没有一个问题表达式
标签: Racket
cross-referencescribble
(Racket documentation tool)说“一起呈现的[…]文档中的交叉引用总是可以解决的”,但是下面的文件a.scrbl没有引用文件b.scrbl
a.scrbl:
#lang scribble/base
@secref["sectag" #:doc "b.scrbl"]
#lang scribble/base
@section[#:tag "sectag"]{A section}
b.scrbl:
#lang scribble/base
@secref["sectag" #
我想制作一个1xn的数组,其中n是某个输入数组中出现的最大值(它只包含整数)。
我用下面的示例输入数组检查了get max的类型。它的类型是整数。(注意,描述来自图书馆(planet williams/descripe/descripe)))
以下是生成数组的代码:
(define (array-from-max input)
(local ((define get-max (array-ref (array-axis-max input 0) #())))
(make-array
我使用scribble生成包的文档
raco会把我的资料和racket self的文件整合起来,
并在页面左上角添加一个搜索框
当您使用“raco文档”时,您可以看到这一点
现在我想使用scribble作为文档工具来生成我的独立文档
文件
但是当我使用scribble——htmls demo.scribble时,它不能有一个搜索框
在页面的左上角
如何添加搜索框以使我的文档具有搜索功能?有一种方法可以做到这一点,但遗憾的是,目前还不是特别令人愉快。如果你想让我们做得更好,请提交一份(或者如果你有
我希望只能从Racket中的模块导入带名称空间的项目。函数中的前缀确实允许我使用前缀从模块访问函数,但它不隐藏旧名称
$ racket
Welcome to Racket v6.6.
> (require (prefix-in tcp: racket/tcp))
> tcp-accept
#<procedure:tcp-accept>
> tcp:tcp-accept
#<procedure:tcp-accept>
$racket
欢迎来到Racket
有没有一种方法可以在一个(键入的)结构旁边为键入的Racket中的整个结构定义一个契约?在我的特殊情况下,我有一个将两个列表作为字段的结构,我希望列表的长度相同
我看过:
,它允许指定一个“守卫”来调节构造函数调用。如果长度不匹配,我可以传递一个引发异常的过程,但我不知道如何处理make struct type返回的值
和的struct形式,两者都从单个字段上的契约生成结构契约。这在这里似乎没有帮助
理想情况下,我希望立即将契约绑定到结构(如定义/契约),但当我提供类型的过程时,我愿意添加契
嗨,伙计们?这里是新手问题。我开始学习如何设计程序。我需要DrRacket IDE来看完这本书,但我似乎无法从网站上获得它
我得到的安装打开了一个命令提示符。如何启动DrRacket GUI部件,或者应该安装哪个软件包。当我安装副本时,它为我创建了一个名为“Racket”的开始菜单组(在“所有程序”下),其中包含“DrRacket”项,设置为运行“C:\Program Files\Racket\DrRacket.exe”
尝试查找此可执行文件,如果找到,可以在命令提示符下键入“DrRacket”
我正在创建一个函数,它使用一个数字列表,并生成列表中高于平均值的元素。
下面是我的代码:
(define (listlength list)
(cond
((empty? list) 0)
(else (+ 1 (listlength (rest list))))))
(define (listsum list)
(cond
[(empty? list) 0]
[else (+ (first list)
我使用VSCode作为我的racket IDE,虽然所有代码都经过编译,但缩进特性都不起作用
我安装了各种各样的球拍扩展(Magic racket等),因此代码都很好并且突出显示,缩进都不起作用。例如,cond如下所示:
(cond[]
[])
我也尝试了VSCode的racket/scheme包。尽管在设置JSON文件中切换了各种设置,但仍面临相同的问题。错误是没有安装“racket”文件的格式化程序。当我按下“format”键盘快捷键时
标签: Racket
code-documentationscribble
我正试图链接到第三方(而不是核心)库提供的Scribble文档(特别是),但我很难让它正常工作
通过这些进口:
@require[scribble/manual
scribble-abbrevs/manual
scribble/example
racket/sandbox
@for-label[(only-in racket
(foldl f:foldl)
我正在尝试在Racket中创建一个简单的Hangman应用程序。我使用一个列表数据结构来保存字母表中的字母,并删除玩家在猜列表中的字母时猜到的字母。但是,我得到以下错误:
(定义未使用的字母(删除“a”未使用的字母))
定义值:不允许赋值
无法重新定义常量
常量:未使用的字母
在列表被更改后,我似乎无法重新使用“未使用的字母”作为列表?有没有办法解决这个问题,或者我应该采取另一种方法?要为现有变量指定一个新值,可以使用set:
(set! unguessed-letters (remove "a
我想把我的球拍程序打出来以加快速度。我的程序使用矩阵数据类型对矩阵执行操作。有人建议我使用数据类型Fixnum
我有一些矩阵,比如,
(:X(矩阵Fixnum))
(定义X(矩阵[[01][23]]:Fixnum))
没关系
但是,如果矩阵中的数字有小数,我会得到一个错误。
(:Y(矩阵Fixnum))
(定义Y(矩阵[[0.5][1.5 2.5]]:Fixnum))
类型检查器:类型不匹配
预期值:Fixnum
给定:正Flonum in:0.5
Fixnum是一种机器类型(我不完全理解它是什
在我的Racket程序中,当我试图从我编写的文件中获取代码时,会收到错误消息:“module:identifier ready required In doc”。但是,当我将代码复制并粘贴到所需的模块中时,它工作得很好。想法
我尝试过使用(提供(全部定义出来))以及在提供表单中列出所有函数名。顺便说一句,我用涂鸦文件而不是直拍文件来编码
@(require racket/date
racket/file
racket/string
ra
创建一个计算程序compute_pos,该程序从键盘读取数字,直到读取0为止,计算读取的正数数量,还计算仅正数的和,并在不同的行中显示计数和正数的和。请注意,计算中不包括0
例如,如果用户输入:
3.
6.
-4
12
15
-9
-24
4.
-3
-5
1.
0
那么你的程序应该打印出来
正计数:6
正和:41
您需要使用“显示”程序来显示计数和总和,还需要使用“读取”程序来保持从键盘读取下一个数字
我甚至不知道从哪里开始,所以感谢您的帮助。欢迎来到Stack Overflow。请阅读帮助中
我已取消选中菜单中的启用键绑定
作为修改器,shift键似乎只适用于箭头键
例如,在默认的活动键绑定中,“向后选择”映射到(c:s:b),但当我按住ctrl和shift键并按“b”时,它只插入“b”。同样的命令也映射到(s:left),这很好。没有移位的键绑定似乎也能工作
对于非字母键,我可以通过制作带有上移符号的自定义键绑定来绕过它;(c:冒号)有效,而(c:s:分号)无效
谢谢你的帮助
我尝试过的事情:
制作自己的键绑定,如3.3.9所示
使用大写字母,例如(c:s:J),更改顺序,例如
我目前正在Racket上写一个项目,在那里我需要与一些(模拟的)设备进行通信。我用球拍管来做这个。设备可以从管道中读取数据,并在管道上写入生成的答案。管家还可以在管道上看到生成的答案,并在管道上编写命令
设备可以通过以下代码将消息写入管道:
File1:
(#%require "communication.rkt")
(write-string message output)
(flush-output output)
通信输出输入和输出端口:
File2:
(define-valu
假设我有一个函数:
(define (func x y)
...)
我想限制这些论点,以便:
x是一个正整数
y是小于或等于x的正整数
第一个约束显然微不足道,但有没有办法在Racket的合同系统中设置第二个约束?是的。您希望使用依赖契约,在使用契约组合符表示的Racket中。您描述的职能合同如下所示:
(->i ([x (and/c integer? positive?)]
[y (x) (and/c integer? positive? (<=/c x)
标签: Racket
recursive-datastructuresmutual-recursionlist-processing
我在处理这个结构时遇到了麻烦,我想写一个函数,告诉我们在一次讨论中有多少个主题
; a Discussion is (make-discussion String Digressions)
(define-struct discussion [topic digressions])
; Digressions is [ListOf Discussion]
; count-topics : Discussion -> Number
; counts the number of tot
它只能键入一个字符。
看起来像只虫子。
我使用的是fc6。这不是问题,所以不应该在这里发布。甚至还不清楚您的bug是什么(我们在Fedora 7上运行它,没有问题)——最好提供更完整的描述,并使用或将其作为bug发布在中
我是racket博士的初学者。我被要求编写一个函数来执行以下操作:
编写一个不消耗任何内容的函数“readnum”,每次调用该函数时,它将生成已定义列表的第n个数字
例如:
(定义一个(列表02-50))
readnum-->0(第一次调用readnum)
readnum-->2(第二次调用readnum)
readnum-->-5(第三次调用readnum)
你不必担心列表中有数字或没有数字可供阅读
racket博士是一种函数式语言,对变量进行变异并将其用作计数器是非常不方便的,在这个问题中,
标签: Racket
interpretervalue-of
所以我对球拍相当缺乏经验,但我正在写一个翻译
我一直无法深入了解闭包到底是什么,或者如何定义/解释“应用闭包”或“生成闭包”
我只是在用match等编写解释器的值
任何帮助都将不胜感激
以班级为例-
(define value-of
(lambda (exp env)
(match exp
[`,b #:when (boolean? b) b]
[`,n #:when (number? n) n]
[`(zero? ,n) (zero? (value-of n env))]
当我想在库上工作并提交修补程序时,我经常喜欢使用raco-pkg安装--clone(或者raco-pkg--更新clone,如果库已经安装)
但是,我意外地在错误的文件夹中运行了raco pkg update--clone,现在我似乎无法让它移动到正确的目录
我试着简单地移动目录,但racket(可以理解)不知道如何处理,我试着删除目录,但也不起作用
理论上我可以卸载软件包并重新安装。但是我已经安装了很多依赖它的软件包,如果要卸载所有这些软件包,然后重新安装它们,那将是非常烦人的
我是否有其他选
我将其保存在一个文件中(文件名为ExamplesFile.scm):
我知道数据是在变量examples
如果我执行:
examples
examples
在迭代窗口中,它给出了文件“examples.scm”中的数据。这很好
稍后,在位于同一目录的另一个文件中,我写入:
(require "ExamplesFile.scm")
在第二个文件的iteraction窗口中,可以使用在“ExamplesFile.scm”中定义的函数。但如果我执行:
examples
examples
我得
我想写的代码是正确的,既为非类型的球拍和类型/球拍
目前,我提出了以下不太令人满意的原则:在文件开头插入“:”的虚拟语法定义,以便在使用非类型化racket时跳过注释。我在使用typed/racket时对这个定义进行了注释
例如:
及
这样我只需要删除/插入一个“;”要在球拍和打字/球拍之间切换
但是有没有一种方法可以让代码在racket和type/racket中运行时不需要任何更改?我没有找到如何通过编程来检测我是否在racket或键入/racket。。。然后我想我还必须找到一种方法,在顶层有
假设我有一个签名如下的函数
(define (my-method a [b 100])
(/ a b)
)
,我应该如何在合同中指定此类签名
使用
(contract-out
[my-method (-> number? number? number?)])
然后在另一个模块中
(my-method 200)
没有帮助,因为它会发出错误,说“违反合同,收到:1个参数,预期:2个非关键字参数”。我想我不能只使用或/c使用->*组合两个有可选参数和没有可选参
我有racket lang代码,可以计算两个集合或列表的笛卡尔积,我不太懂代码,任何一个都可以将代码转换为伪代码。该函数对应笛卡尔积的定义
参数中的点意味着列表将收集所有参数(在列表中),无论传入多少个参数
如何调用这样的函数?使用应用。它使用列表中的项目作为参数应用函数:(应用f(列表x-1…x-n))=(f x-1…x-n)
foldr只是列表上自然递归的抽象
应用1)、2)和3)中的简化,并将foldr中的“合并”函数转换为单独的辅助对象:
; my-foldr : [X Y] [X Y
有人知道如何或是否可能在drScheme/Racket中自动完成括号吗?DrRacket不会自动完成结束括号(我想这就是你要问的问题),但是它会插入正确的paren形状——因此您可以快速点击几次]],直到关闭正确的级别
但是作为旁注,如果你一直保持括号(各种形状)和双引号等的平衡,那么在任何sexpr语言(或者实际上是任何其他语言)中工作都要容易得多。DrRacket通过使Alt-(E/CODE)插入一对PARES并将光标放在中间。Emacs也一样,但是DrRacket有类似的方括号、大括号和双
您好,我需要创建一个函数,该函数使用的列表只对列表中的数字求和,而忽略任何其他类型的数据(字符串等)
示例(仅添加数字(cons 5(cons“b”)(cons 2(cons“whatsup”empty()))
应该是(cons 7(cons“b”(cons“whatsup”为空)))
在收集数字并将其全部相加时,保持所有字符串或其他数据类型的顺序
如果没有数字,只有字符串,那么前面应该是0
示例(仅添加数字(cons“eb”(cons“b”(cons(使posn 5 0)(cons“whats
有这样的列表操作吗
"(x y)
"(1 2)
(替换)(x'y)“(12)(+'x'y))
->(每个符号由数字列表相对匹配,并替换)
->(x=1,y=2)
->(+12)
->三,
我从参考资料中找不到任何想法
您可以使用让:
(let ((x 1)
(y 2))
(+ x y))
如果您试图表示名称和值之间的映射(“字典”),有几种方法可以实现。Racket提供了一种散列类型,可以将名称与值关联起来。你可以在报纸上读到他们。有一种更通用的方法可以在Racket(在库中描
给定一个列表和一个数字n,我试图将一个列表分成两个独立的列表:一个列表长度为n,第二个列表是原始列表的其余部分
以下是我所拥有的:
(define (part lst i)
(if (> i 0)
(list (append (list (first lst)) (list (part (rest lst) (- i 1)))))
(append lst)))
其中lst是输入的列表,i是编号。当我输入带有数字2的列表'(1234)时,我返回的输出是:'((1)((2(34)'))),而
我正处于设计框架的早期阶段,正在玩弄typed/racket。假设我有以下类型:
(define-type Calculate-with-one-number (-> Number Number))
(define-type Calculate-with-two-numbers (-> Number Number Number))
我想有一个函数,可以根据类型进行分派:
(: dispatcher (-> (U Calculate-with-one-number
我知道我要问的问题通常是邪恶的。我这样问是因为我想做一些测试,以确保即使用户调用eval(这个问题是关于什么的),静态分析也能正常工作。要了解更多信息,请查看
问题:
在许多其他动态语言中,我可以使用eval修改当前环境的状态。我想在球拍上做一些类似的事情。例如,我想写一些类似于:
#lang racket
(define x 5)
(eval '(set! x 6))
(displayln x)
并将x设置为6。在Racket中可以这样做吗?使用名称空间锚可以这样做。具体来说,你想要和
具体
拥有
在TypedRacket中,如何使此函数工作?该函数的工作原理如下:
(: f (-> Procedure (Pairof Integer Integer) Boolean))
(define (f comparator pair)
(comparator (first pair) (second pair)))
我发现以下错误:
(f = '(1 2)) >>>> false.
(f > '(4 2)) >>>&g
系统:MAC OS 10.11.6
错误消息:
Error: could not connect to website
(url->port: bad reply from server: #<eof>)
错误:无法连接到网站
(url->端口:来自服务器的错误回复:#)
我不知道是否可以简单地将应用程序中的“Racket v6.2.1”文件夹拖到垃圾桶中,然后安装最新版本的DrRacket。不幸的是,这是Racket中的一个错误,在v6.2.1中存在。它已经被修复(由我,
在语法分析中我们可以使用,但这需要考虑绑定。具体来说,它“将任何无标识符的标识符=?与文字id匹配”。我想忽略绑定。具体地说,我想匹配任何一段语法x,以便(equal?(syntax-ex)'一些数据)。在下面的示例中,我希望语法分析能够成功,即使bar具有不同的绑定信息:
#lang racket
(module m racket
(provide foo)
(require (for-syntax syntax/parse))
(define-syntax (foo stx)
我正在编写一个函数,它将生成一个新版本的二叉树bt,其中每个节点的值都是奇数长度字符串,其值将替换为字符串“奇数”。
例如:
(check-expect (odd-length (make-node 4 "four"
(make-node 7 "seven"
empty
可以使用在过程中局部绑定变量。这将如下所示:
a1 = find-disk-area(r1)
a2 = find-disk-area(r2)
if( a1 > a2 ):
print(a1 - a2)
else:
print(a2 - a1)
您还可以使用,以达到相同的效果,将标识符绑定到某个表达式的结果:
(define (find-disk-area r)
(* pi (sqr r)))
(define (find-ring-area r1 r2)
(le
我目前正在进行扩展,这是我通过在repo目录中运行racopkginstall安装的库
我试图提供一个新函数,即结构构造函数。目前,我正在racklog.rkt中定义结构,如下所示。然后我从该文件中提供它
;racklog.rkt
(结构我的结构(值))
(提供我的结构)
库的主文件仅提供此文件中的所有内容:
;main.rkt
(需要“racklog.rkt”)
(提供(全部从“racklog.rkt”))
但是,当我尝试在需要此模块的文件中使用提供的构造函数(应命名为mystruct)时
我有:
为了
我得到了正确的答案
然而,当我提出:
(andmap1 positive? (list 1 -1 2))
我犯了一个错误。
如果pred和列表中的元素不匹配,如何使函数停止?(pred可以是任何谓词)您的和map1很好,已经短路了
(andmap1 positive? (list false 1))
此处短路的含义是,如果x是列表中y之前的一个元素,并且(px)的计算结果为false,则将不计算(py)。在我上面的例子中,(正值?“Hi”)没有计算,因为(p-1)已经计算为fa
我正在学习语言技巧,试图掌握call/cc的实际用途。有人能用简单的话解释一下并举一两个例子吗?谢谢。如果你有一个表达式(+(*23)(/102))一个方案系统不会同时评估所有内容,而是部分评估。方案中没有指定顺序,但让我们设想一下,顺序是从左到右(我认为球拍总是从左到右):
如果执行(*23),则继续计算(/102),然后计算(+result1result2)。Scheme系统实现这一点的方法是在执行之前将代码转换为。上面的表达式变成这样:
(λ(k)
(*& 2
3.
(λ(结果1)
(/
上一页 1 2 3 4 5 6 7 8 9 ...
下一页 最后一页 共 25 页