我正在试验racket文档中给出的2htdp/planetcute库
当我尝试使用它的对象时,比如角色男孩。它告诉我动态需求被设置为f而不是0
因此,有一个过程称为:
(dynamic-require mod provided)
其中,mod=模块路径,提供的=值
所以,我运行了这个:
(define path (string->path /usr/shared/...../character-boy.rkt))
(dynamic-require path 0)
然后,我可以使用返回图
如何用我声明的列表重新创建下面的代码
作为变量
> (map (lambda (i) (string-append i "!"))
(list "peanuts" "popcorn" "crackerjack"))
'("peanuts!" "popcorn!" "crackerjack!")
谢谢你是说像这样吗
(define (add-! l)
(map (lambda (i)
(string-append i "!")) l))
(define
标签: Racket
racket-student-languages
我有一个值列表,希望从中获取前x个值并创建(list(listof first x values)(listof next x values)等等,直到这个列表变为空…)
例如,给定此列表:(列表“a”“b”“c”“d”“e”“f”“g”“h”“t”)
返回以下内容:(列表a“b”c)(列表d“e”f)(列表g“h”t)
提前感谢:)记住列表的数据类型是什么。您的类可能正在执行以下操作:
;; A IntegerList is one of:
;; - '()
;; - (cons In
expr=变量| bool literal | not expr |和expr |或expr
variable = a symbol v for which (is-vble? v) returns #t .
bool-literal = "t" | "f" .
not-expr = "(" "not" expr ")" .
and-expr = "(" expr "and" expr ")" .
or-expr = "(" expr "or" e
标签: Racket
lambda-calculustype-theorypie-lang
我试过下面的例子,但不管y发生与否,
函数f在应用后返回与(λ(y)(fy))相同的值
我想做的是定义一个函数,当Y作为反例出现在Y中时,它与(λ(Y)(fy))不同(->yx),但我不知道如何定义
我是否误解了λ的最初第二条戒律的含义
;;y does not occurs
(claim f (-> Nat Nat))
(define f
(λ(y)
0))
;; both return (the Nat 0)
(f 5)
((the (-> Nat Nat)
我正在尝试为如下数据订立合同:
(a(b c)(d e);;a、 b、c、d、e都是符号
它基本上是一个列表,由一个符号和任意数量的两个符号组成
有list/c,但这只允许我使用固定数量的元素。
还有*list/c,它接受任意的初始值,然后是最终的固定值,这与我需要的正好相反
如何为我的数据结构制定正确的契约?您可以使用cons/c将一个契约应用于列表的开头,另一个应用于列表的结尾。你想表达的是,头部是一个符号,而尾部是一组符号对的列表,因此:
(cons/c symbol? (listof
我试图记住如何在lazy racket中进行动态规划。在我解决了欧拉计划的一个问题后,我开始思考这个问题:
从下面三角形的顶部开始,移动到相邻的
下一行中的数字,从上到下的最大总数为23
3
7 4
2 4 6
8 5 9 3
也就是说,3+7+4+9=23
从下面三角形的顶部到底部查找最大总数:
我用下面的代码解决了这个问题。然而,我在学校里学到了lazy-racket(实际上是一般的编程语言),我似乎还记得,在lazy语言中,解决动态编程问题要容易得多。例如,在其他EULER
目前,有些编程语言(如DrRacket(DrScheme)、DrJava和DrPython)有一些ide。有人知道前缀“Dr”代表什么吗?它的意思是医生。IDE是一种关于语言的博士/教授。它的意思是博士。IDE是一种关于语言的博士/教授。这一假设由题为“DrJava:Java的轻量级教学环境”的“DrJava:Java的轻量级教学环境”支持。这一假设由题为“DrJava:Java的轻量级教学环境”的“DrJava:Java的轻量级教学环境”支持。这一趋势始于PLT方案。Scheme解释器/编译器
以下步骤是在飞行模拟器的racket雷达模拟器中,它将锁定在飞机上的对象显示为椭圆,我们需要让椭圆周期性地闪烁和重新出现。使用或不使用帧计数器,如何编写脚本
(define rwr-tracking
(let ([p (new dc-path%)])
(send p ellipse 0 0 400 400)
p)
)
下面是一个让您开始学习的示例:
#lang racket
(define (redraw-radar)
(sleep 0.5) ; 0.5 seconds
我想强制执行racket中函数输入的数据类型。例如,在这个函数中,如果有人输入字符串,我希望得到整数并抛出一个错误
有没有一个标准的方法来执行这一点在球拍
(sum-coins pennies nickels dimes quarters)
pennies : integer?
nickels : integer?
dimes : integer?
quarters : integer?
是的,有两种标准方法
合同
检查条件并在运行时引发错误:
#lang racket
(d
在命令行中运行Racket时,可以使用开始运行Racket程序
(enter! "yourfile.rkt")
如何在命令行中保持Racket打开的同时退出当前的.rkt程序?
使用
完全关闭Racket而不是当前的.rkt程序。也许您可以尝试一下,当前名称空间将恢复为原始名称空间
(enter! #f)
(enter! #f)
map函数是如何在racket中实现的,为什么是递归或迭代
可能是一些实现示例如何实现map
map函数遍历一个列表(或多个列表),并将给定函数应用于列表的每个值。例如,将add1映射到列表会导致:
> (map add1 '(1 2 3 4))
'(2 3 4 5)
因此,您可以将map实现为递归函数:
(define (map func lst)
(if (empty? lst)
'()
(cons (func (first lst)) (map func (re
(/10)是非法的,但为什么我们没有看到错误
我的讲稿中有一个解释
标识符或不是指函数,而是指
实现短路的语法形式
但我还是不太明白。关键是,或是一种句法形式,正如你在课堂讲稿中提到的那样。这意味着求值规则不同于正常过程,可以在解释器级别实现,或者(更可能)作为派生表达式或宏实现。如果我们试图将或作为一个过程来实现,您的示例确实会失败:
(or #t (/ 1 0))
过程在将所有参数传递给主体之前对其进行评估。相反,或计算其第一个参数,如果它是truthy,则返回第一个参数的值,否则返回计算
在else条件下,我有两条语句要执行。第一个应该将我的计算附加到我的返回列表中,第二个应该再次调用我的递归过程。
问题是我的append过程被忽略了,所以我只是返回一个空列表
(define (calcit x lst)
(cond ((= x 0)
retlst)
(else (append (list (floor (/ x (first lst)))) retlst)
(calcit (modulo x
我想重新绑定
C-up至“M-p:将先前输入的表达式向下移动到提示符”
及
C-down至“M-n:将表达式历史记录中当前表达式之后的表达式向下移动到提示符”
Racket的行为不同于我的默认终端,我可以使用这些控件绑定滚动之前的表达式。racket给出了一些重新绑定的示例,但没有解释如何仅在“交互”窗口中重新绑定键,这正是此处需要的。它所做的是保持C-up和C-down的相同绑定,这意味着上下移动光标,这在编辑器窗口和交互提示中非常有用。但我不想这样,因为我看不出它的用途。这是我自己用的。请随
标签: Racket
shift-reduce-conflict
我正在编写一个球拍代码,我遇到了一个问题,有人能告诉我如何解决它吗?我总是得到:1转变/减少冲突
注:(它是代码的一部分)
提前谢谢
(statement
; a statement is one of these many things
;;; TODO: Add Paper, Pen, Line, Set and Repeat
[(PAPER expr) (paper-expr $2 (numeric-expr 100) (numeric-expr 1
标签: Racket
higher-order-functions
这是我的家庭作业,但我们只允许使用过滤器、映射、foldr、排序、构建列表和lambda,而不是显式递归
如何使用上面的高阶函数重写这些函数,以避免函数本身调用
我现在拥有的是:
(define (worthless loc name)
(cond
[(empty? loc) loc]
[(equal? name (coin-name (first loc))) (cons (make-coin (coin-name (first loc)) 0) (worthless (r
标签: Racket
read-eval-print-loopmutation
通常,我避免使用突变,因为你很少需要它们
然而,我需要他们,我正试图更好地理解一些事情。有一种特殊的行为引起了我的兴趣,我想请你帮助我更好地理解它
如果我在REPL上键入以下更改,则一切正常:
> (define x 1)
> (set! x (+ x 1))
> x
2
如果我将赋值和变异放在定义窗口中,它也会起作用:
(define y 1)
y
(set! y (+ y 1))
y
运行文件后,我可以在REPL上看到以下正确结果:
1
2
>
但是,如果我将变
我在racket中看到一些函数或数据结构使用关键字(#:foo),但我还没能变出我自己的函数来使用它们。racket文档只是松散地定义了关键字类似于符号,sorta只是保留了这一点,但是编写一个假定以关键字作为参数的函数只会导致以下错误:在关键字之后缺少参数表达式,这让我相信关键字和符号完全不同,因为它们不能仅仅作为值传递(除非引用)
我最熟悉的使用关键字的示例是match:
(...
(match foo
[n #:when (< 10 n) "foo is grea
标签: Racket
continuationscallcc
我正在Racket中学习call/cc,通过示例沿着纸张的连续线学习:异常、时间旅行搜索、生成器、线程和协同程序
本文提到,最有利的API来自call/cc,它提供了一个过程lambda(cc)(cc-cc)。我理解这个特定的call/cc调用将当前的continuation一级对象返回给主程序
在下面的示例中,本文调用所有这些(现在)
我看到的是,在同一个示例中,上面提到的call/cc调用返回的cc对象始终通过将其应用于自身来运行。这就是我不明白的
我看不出cc有什么特别之处,所以我试着用(
此程序在DrRacket中运行良好:
(define (display-state input data)
input)
(define (update-state input data)
data )
(define (main input data)
(displayln (display-state input data))
(main (read-line (current-input-port) 'any) (update-state input d
我在Racket中创建了一个模块(game.rkt),其中有我的游戏逻辑;在这个文件中,我定义了几个变量、函数、线程
我需要将该模块嵌入到另一个模块(gui.rkt)中,并从gui.rkt启动游戏(game.rkt)
我该怎么做?
gui.rkt:您需要提供希望其他模块能够使用的定义。默认情况下,定义在模块外部不可见。如果您已经定义了要提供的函数foo和bar:(提供foo-bar)
game.rkt:(需要“gui.rkt”)
这假定文件位于同一目录中
有关更多详细信息,请参阅指南中关于和的
我试图通过定义自己的模块begin来捕获扩展的表单:
(define-syntax-rule (my-module-begin e ...)
(#%module-begin
e ...
(foo e ...)))
我说的foo这里有原始表格,对吗?如果是这样的话,foo是否有办法获得扩展表单?要获得扩展表单,您需要以某种方式使用
第1部分,不完整的解决方案
您可能会想单独调用每个表达式,如下所示:
#lang racket
(require syntax
在racket中,我知道member函数返回元素的第一次出现(如果它存在)或#f,但是否有一个函数只返回元素是否存在于列表中的#t或#f,我认为没有标准函数,但是你可以在图书馆里看到和看到
定义true?非常简单:
(define (true? x)
(if x #t #f))
我不认为有一个标准的函数用于此,但请参阅库中的和
定义true?非常简单:
(define (true? x)
(if x #t #f))
这个问题的答案是会员。在《球拍》中,一切不是#f的都是真的。
定义函数iota1(n,m),该函数将n'(3 4 5)
(cons 3)(cons 4(cons 5’))(cons 4)(cons 5’))
选择使用cons而不是append是个好主意,因为它更简单,而且速度更快,因为cons不像append那样遍历整个列表
由于这听起来有点像家庭作业问题,我将给您留下一个“代码模板”来帮助您找到答案:
;n:整数
; m:整数
; 返回值:整数列表
(定义(iota1 n m)
(如果(>n m);基本情况;当n大于m时无需做功
…;位于列表末尾的值
我试图在给定的字符串(而不是文件)上执行定制的#lang。我们把它叫做花椰菜
安装程序
我的语言定义如下:
西兰花/main.rkt
(模块读卡器支架/底座
(需要花椰菜/私人/阅读器)
(提供读语法));基本上是一个复制品
西兰花/private/reader.rkt
(提供
(改名为
[我的阅读]
[我的读取语法读取语法])
(定义(我的读入)
(语法->基准
(我的阅读语法#f in)))
(定义(我的读取语法src in)
(使用语法([parse tree(parse src(mak
假设我有一个用于区间结构的生成器,例如
(struct interval (lo hi)
#:methods gen:custom-write
[(define write-proc
(make-constructor-style-printer
(lambda (obj) 'interval)
(lambda (obj) (list (interval-hi obj) (interval-lo obj)))))])
(defi
我收到了以下代码:
#lang racket
(define-struct utc (sign hours mins))
(define-struct location (city timezone))
(define iqaluit (make-location "Iqaluit" (make-utc '- 5 0)))
(define london (make-location "London" (make-utc '+ 0 0)))
(defi
我正在尝试编写一个函数来计算。我最初将数据存储在表单的列表中:
'(1 8 0 0 0 1 0 5 0 1)
'(1 0 2 0 0 0 0 5 0 0)
基本上我想得到的是:
'(0 64 4 0 0 1 0 0 0 1)
使用列表并不难实现这一点,就像使用下面的代码一样:
(define (f a b)
(apply + (map (λ(x y) (sqr (- x y))) a b)))
然而,我正在处理的数据中有相当多的零,因此我尝试用哈希集替换列表,如下所示:
'#hash(
“图片程序”第10章(最后练习10.2.6)是我正在编写的书
我试图以线性方式使用书中介绍的内容。该练习需要在窗口上显示x&y坐标的动画
必须在不使用条件、循环、未提及的内置函数等的情况下执行此操作
我在编写鼠标处理程序处理同一表达式中的x-mouse和y-mouse时遇到问题
我想不出一种方法来跟踪它们(即…在同一个mh中)而不抛出错误
(define (number->image s)
(text (string-append "(" (number->s
如何使用racket语言编写如下工作的函数奇数列表
(odd-list '((1 2 3 4) (5 6 7 8) (10 11 12 13))) => ((1 3) (5 7) (11 13))
(需要srfi/26)
(定义(奇数列表)
(映射(剪切过滤器奇数?)列表)
享受。:-) 嗨,欢迎来到Stack Overflow!这里的习惯是实际提问而不是发号施令(我对你的问题做了一些编辑)。这些问题可能是“我尝试了foo,希望得到bar——为什么我得到了baz”,而不是“你能帮我做作
要求是使用drracket方案构建列表生成一个aa aaaaa的列表
我试过foldr,但只给aaaaa
(define (build-a-string n)
(foldr string-append "" (build-list n "a")))
下面是一个使用折叠的解决方案:
#lang racket
(define (build-as n)
(for/fold ([as '("")]) ([_ n])
(define last-a (first as))
(de
我的球拍语言有问题。我想在列表中找到目标状态。但在达到我作为参数给出的限制的那一刻,我得到了->函数调用:在开括号后应该是一个函数,但收到的却是空的。问题出在expand2中
我怎么在球拍上写这个
(定义(主启动限制)
(let([结果(扩展起始限制)])
(写入结果)
(定义(扩展状态限制)
(条件((目标状态)(列表状态))
((
我想定义一个具有以下属性的函数:
(almost-equal? (cos (/ pi 2)) 0.0) ; --> #t
为此,我认为应该以以下方式使用flulp:
(define (almost-equal? a b)
(let [[epsilon (max (abs (flulp (* 10.0 a))) (abs (flulp (* 10.0 b))))]]
(<= (absolute-error a b) epsilon)))
(定义(几乎相等?a b)
我想写一种新的球拍语言,它以某种特殊的方式捕捉和处理字符串。我编写了以下示例代码:
#lang racket
(provide #%top #%app #%top-interaction #%module-begin
(rename-out [datum #%datum]))
(define big-string "")
(define (add-string x)
(set! big-string (string-append big-string x)))
(d
在C语言中,您可以使用选项进行编译,例如,-DPROMPT。然后,在文件中可以有#ifdef提示符,代码将在编译时转换以包含该块中的内容
球拍里有类似的东西吗?我尝试了racket--help,但没有看到任何有用的选项。使用环境变量在racket世界中公开外部值
是的,但它的工作原理与C语言略有不同。正如Alexis所说,Racket编译是半隐形的。然而,球拍回音系统中有一些工具可以做到这一点,其中最流行的就是
无论何时使用,只要愿意,您都在编写编译器插件。这与C之间的主要区别在于,在C中,您需
标签: Racket
semanticsplt-redexredex
完全可以在不使用评估上下文的情况下为我的语言编写评估规则。我的语义完全是按值调用的,不允许在lambdas中向前推进术语。尽管如此,我看到的所有资源都以某种方式使用了reduce上下文。有没有一个很好的理由使用我所缺少的上下文?简短的回答:你没有,但是使用它们会容易得多
长句回答:几乎所有你将使用评估上下文的东西,你可以在你的简化关系中使用不同的简化规则,这会变得更令人讨厌,尤其是当你对任何东西建模时,除了最小的语言
假设您希望通过值lambda演算对调用进行建模。其语言(无评估上下文)为:
(
我想从列表1中选取一个随机元素,将其从列表1中删除,然后将其添加到列表2中。
(定义列表1'(1 2 3 4 5 6 7 8)
(定义列表2’(9 10)
现在我的问题是,我使用了两个函数来更新列表。
list1将删除一个随机元素,list2将追加一个随机元素,但并不总是相同的元素。
如何使list2添加元素,删除list1,然后重复这些步骤,直到list1为空?
提前多谢
#朗球拍
(定义列表1’(1 2 3 4 5 6 7 8))
(定义列表2’(9-10))
(定义(选择随机列表)
(汽车
显示的错误为:模块语言:定义窗口中只能有一个表达式:(定义(灯泡c)(圆圈10“实心”c))
交互被禁用。
///我无法找出错误所在。DrRacket无法识别代码中使用的语言。您需要手动选择一种语言。看起来您正在学习HtDP教科书的第一章,所以我建议您学习初级学生语言。您可以通过以下方式进行:
在文件开头添加#lang htdp/bsl
使用DrRacket窗口底部的选择器:
对“创建交通信号图像”部分进行了注释,它适合我。。。尝试改变语言谢谢@Andrea Gottardo。选择一种语言,
我在Mac OS X Sierra上,我一直在使用自制软件来获得最小的拍子,然后通过raco在上面添加我想要的东西。其中的一件事就是拉扯
然而,在从6.10升级到6.11之后,事情有点不对劲。当我升级brew时,brew中的操作进行得很顺利,没有产生任何错误。但drracket随后未能启动,原因如下:
dyld:库未加载:/usr/local/cell/minimal racket/6.10/lib/racket/racket.framework/Versions/6.11_3m/racket
我想检查语法对象中是否存在关键字。
当关键字后面跟一个表达式时很容易:
(syntax-parse #'(hello #:world "sunny")
[(_ (~optional (~seq #:world <adjective>:str)))
#'(string-append "Hello world! Today's weather is "
(~? <adjective> "unknown"))])
如何将#:w
最近我在学习球拍的特质系统
我用两种相互递归的方法做了一些关于super调用的实验:
我首先尝试了mixin,它的工作原理与预期一致:
#lang racket
(define fish%
(class object% (super-new)
(define/public (get-color)
(println "fish% get-color"))
(define/public (get-price)
(println &qu
我在Emacs中的Geiser环境中使用(带“hello”3的字符串)。它显示了一个错误
string-ith: undefined;
cannot reference an identifier before its definition
in module: top-level
context...:
eval-one-top
/usr/share/racket/collects/racket/repl.rkt:11:26
我在Racket博士的IDE中尝试了同样的方
今天拿起《球拍王国》一书,读完了第一章。在编辑器中真正让我慢下来的是需要鼠标单击来切换面板。有键盘快捷键吗?我在上的“键盘快捷键”部分找不到它
顺便说一下,我听说标准的Lisp编辑器是Emacs。DrRacket附带的编辑器是否基于Emacs?在这里找到了答案:
结果显示,按一次或两次Control-D或Control-E即可完成此任务。您也可以使用Ctrl+F6直接切换。
我想知道如何打印列表定义的名称,如:
(define Mylist (cons "ab" (cons "cd" (cons "ef" empty))))
然后调用(字符串附加“Mylist”“其余的..bla bla”)。
不(字符串附加“abcdef”“其余..bla bla”)
例如:
我有一辆小型公共汽车,上面有乘客“约翰”、“丽莎”、“伊迪”。
现在我想做一个函数,它可以打印如下内容:
“小巴运输:约翰、丽莎和伊迪”。听起来你想知道名单上的名字。也就是说:给定列表,做一些得到列表名称的
我在用图论开发一个数学研究程序,我需要画数据。有图书馆吗
图形示例:
‘((1 2) (1 7) (2 3) (3 2) (4 2) (7 4))
提前谢谢你 Usegraphis允许您在GraphViz的帮助下绘制图形
我不熟悉Lisp scheme,也不熟悉整个函数范式,目前正在做一项作业,要求我在racket中重载一个名称相同但参数集不同的函数。下面是我努力实现的一个例子:
#lang racket
(define (put-ball-in-box two-by-fours nails ball)
... )
(define (put-ball-in-box box ball)
... )
这些不是实际的功能,但已经足够接近了。正如所暗示的那样,这两个函数都会将一个球放入一个盒子中,但其中一个
我被这个问题困住了。事实上,代码一直在运行,并且没有结束。有什么建议吗
(选中expect(所有元素?偶数?(列表1 2 3))false)
(选中expect(所有元素?偶数?(列表2 4 6))true)
(选中expect(所有元素?奇数?(列表1 3 5))true)
(定义(所有元素?谓词lst)
(续)
[(空?lst)假]
[(谓词(第一个lst))true]
[其他(所有元素?谓词lst)]
)
)
不同的方法:
或作为可变函数:
(define (all-elements? p
我试图编写一个宏,其行为与racketdefine类似,但以某种方式处理完全扩展的racket过程(为了简单起见,在下面的示例中进行扩展):
除非满足递归定义,否则一切正常:
(define/expand (sum n)
(if (<= n 0)
0
(+ n (sum (- n 1)))))
它解决了这个问题(local expanded成功地将过程扩展为定义值),但创建了另一个:
模块:中定义的上下文外标识符:sum
指出和的定义。原因可能是扩展器将标识符
我想使用编辑器显示程序中的日志,我只需要一个非常基本的文本字段:
使用垂直滚动条
具有用于复制/粘贴的上下文菜单
防止用户更改文本
为了激活复制/粘贴菜单,我使用类racket:text%from framework而不是basic
如何防止用户更改文本
我阅读了文档,据我所知,我找到的最接近的东西是锁方法:
但这并不方便,因为它还阻止我的程序写入数据。
我还发现读写?但是找不到set read write。使用lock方法,只需在需要修改的地方解锁编辑器即可。您可能会发现,使用unloc
1 2 3 4 5 6 ...
下一页 最后一页 共 24 页