Racket for/fold抛出算术不匹配异常

我正在翻阅《美丽的球拍》这本书。我正试图以一种功能性的方式创建自己的语言,遵循语法:bf一章 我已将我认为的问题浓缩到以下节目中: #lang racket (define (fold-funcs control-list fruit-funcs) (for/fold ([current-list control-list]) ([fruit-func (in-list fruit-funcs)]) (apply fruit-func current-lis

Racket 是否有方法将所有可选参数传递给另一个函数?

我有一个函数A,它接受10个可选参数。 我有另一个函数B,它接受相同的10个可选参数。 有没有简单的方法将一个函数的可选参数传递给另一个函数?解释器的解决方案 在解释器中,您只需执行以下操作: ; 0. define your arguments list which the functions have in common (define args-list '(1 2 3 4 5 6 7 8 9 10)) ; 1. call the functions `your-function` -&

如何在racket中遍历列表?如果列表中的字符是字母,我想添加到一个新字符串中

这是我的密码?有人能告诉我如何遍历列表吗?如果列表中的字符是字母,我想添加到一个新字符串中 朗格球拍 定义转换输入 定义字符串 让char字符串->列表输入 康德 [字符字母顺序?第一个字符 字符串[s第一个] [char字母顺序?rest char 字符串[s rest] 显示 基本迭代是: 定义复制列表lst 如果为空?lst ' cons car lst 复制列表cdr lst 复制列表'1 2 3;==>1 2 3 这一个实际上是你的列表的一个浅显副本。有时,您会通过保留一些变量来进行迭

Racket 球拍响应/xexpr中的评估变量

我正在尝试在Racket中制作一个简单的书签web应用程序 它的目的是接收一个url作为CGI参数,现在,我只是想通过反射来确认我收到了它 (define (start request) (response/xexpr (let* ([bindings (request-bindings request)] [url (if (exists-binding? 'url bindings) (extract-binding/sing

Racket 函数不在球拍中赋值

为什么以下函数(匹配重定义)不起作用 (define vlist (list 10 20 30)) (match-define (list aa bb cc) (list 1 2 3)) (define alist (list aa bb cc)) alist vlist (define (match-redefine dst_list src_list) (for ((d dst_list)(s src_list)) (set! d s)) ) (rnmatch-redefin

如何允许Racket中的模块中存在重复定义?

我希望基本上允许程序重新定义标识符,当任何其他语句使用该标识符时,它将绑定到最新的标识符 例如,我想要这样的东西: #lang racket (define x 3) (write x) (define x 5) (write x) 要输出35这是一个很难回答的问题,因为您可能有许多不同的原因想要这样做 1) 您希望能够更改绑定到的内容 在这种情况下,也许您会对set感到满意。e、 g: #lang racket (define x 3) (write x) (set! x 5) (write

Racket 如何在崇高的文本中运行球拍?

我安装了Sublime文本球拍软件包,但它不起作用。这个错误出现了。我该怎么办 [Errno 2] No such file or directory: 'racket' [cmd: ['racket', '/Users/ZweNaing/Desktop/DrRacket/addDash.rkt']] [dir: /Users/ZweNaing/Desktop/DrRacket] [path: /usr/bin:/bin:/usr/sbin:/sbin]

Racket 如果出现错误,如何获得系统命令的输出?

在一篇关于这类事情的文章中,我学习了如何在成功的情况下访问命令的输出,以及在出错的情况下执行其他代码。但是,对于我来说,在出现错误时打印命令的输出通常更有意义。解决另一个问题的代码是: (with-output-to-string (lambda () (unless (system "ls -la") ;; handle error here ))) 除非表单,否则如何在表单中获取系统命令的输出 用法示例:我想运行一些系统命令,只想向终端打印“Succes

以emacs REPL运行racket时的GC日志记录

在emacs中以raket模式运行Racket代码时,我没有收到任何GC日志消息 在DrRacket中运行以下代码会返回一个日志条目,而在Emacs REPL中运行它则不会 (define my-logger (make-log-receiver (current-logger) 'debug 'GC)) (collect-garbage) (sync/timeout 1 my-logger) 如何获取Emacs REPL案例中的日志消息 确保你有一个新版本的球拍模式(例如) 使用C-C-l

Racket 为什么我会得到一个;“算术不匹配”;错误?SICP练习1.43

我在从一开始工作 练习1.43。如果f是一个数值函数,n是一个正整数,那么我们可以形成f的第n个重复应用,它被定义为x处的值为f(f(…(f(x))…)的函数。例如,如果f是函数x↦ x+1,那么f的第n次重复应用就是函数x↦ x+n。如果f是一个数的平方运算,那么f的第n次重复应用就是将其参数提升到第2次方的函数。编写一个过程,将计算f和正整数n的过程作为输入,并返回计算f的第n次重复应用的过程。您的程序应能按如下方式使用: ((repeated square 2) 5) 625 提示:您可

racket中后缀解释器的读取语法函数

我写了一个读取语法函数,但ı得到了这个错误。我的读取语法功能是: (define (read-syntax path port) (for([line (port->lines port)]) (parse-line line))) 错误是: Module Language: only a module expression is allowed, either #lang <language-name> or (module <name> <l

Racket PLT可以重新定义这些功能的模型吗?

刚刚开始学习PLT Redex。。。出现了两个问题: 我们可以用PLT-Redex来模拟副作用吗?例如:简单增量构造i++ 那么线程呢?到目前为止介绍的所有构造都不涉及创建线程之类的内容?线程的同步?在PLT Redex(语法和简化规则)中是否可行 提前感谢,我是PLT Redex的新手,但如果没有其他人回答: 是:请参阅“为什么PLT Redex?”页面,其中给出了使用可变状态的示例: 我应该这么认为,因为他们给出的1的解决方案看起来很一般。您的程序状态将包括许多项,每个项都是一个线程的状态。

Racket 除了'new-∀;'/c`和`新∃/c`?

球拍分为:固定合同、陪护合同和冒充合同 对于模拟合同,我能找到的唯一示例是的合同。除此之外还有其他例子吗?(例如,类/c,对象/c,等等)目前都是模拟合同。尽管最终可能会提供这些服务的伴侣版本。相比之下,不可能将参数化契约变成伴侣契约 构建的递归契约也默认为模拟者契约,但可以配置为任何类型。(例如,类/c,对象/c等)当前都是模拟者契约。尽管最终可能会提供这些服务的伴侣版本。相比之下,不可能将参数化契约变成伴侣契约 构造的递归协定也默认为模拟协定,但可以配置为任何类型

Racket 懒散球拍的优点和/或缺点

我知道球拍有严格的评估,即渴望评估,但可以选择懒惰评估。我对函数式语言所做的有限阅读表明,一般来说,惰性评估语言可以更具表现力,因此,为所有Racket程序选择惰性评估选项(在速度、代码健壮性、库的存在等方面)是否存在任何“技术”劣势 如果没有,是否有明确的哲学理由支持严格评估(接受引用)?如果您对不同语言的表达能力感兴趣,那么我可以推荐Matthias Felleisen的“关于编程语言的表达能力”。摘要: 关于编程语言的文献中包含了大量的非正式信息 关于相对表达能力的主张 编程语言,但没有一

Racket 使用Regexp match*在两个标记之间拉入数据

我需要能够将数据拉到不同的点之间 "test test <p>important information</p> test test test <p>more important information</p>" “测试测试重要信息测试测试更多重要信息” 结果应该是“(“重要”信息“更多”重要”信息”)以下工作: (define str "test test <p>important information</p>

Racket 子字符串:开始索引超出大爆炸的范围

“图片程序”是我正在和第10章合作的一本书。我试图以线性方式使用书中介绍的内容。当鼠标移动或单击时,该程序将从字符串中删除第一个字符,但我找不到阻止它将字符串抛出范围之外的方法 我尝试了几种不同的方法,不幸的是,我花了数小时在上面。这必须在没有条件、循环、未提及的内置函数等的情况下完成 任何提示都将不胜感激 这是实际情况 因此,为了改进程序,在函数定义中添加了一段代码(先在鼠标上切掉…),这就是内置函数(min)。这是获得预期结果所需的唯一改变 这似乎给出了所需的输出,因为新定义/优化的“先在鼠

Racket “的定义是什么?”;顶级表格“;吵闹

球拍参考第11.9节“扩展顶级表格”和第13.2节“评估和汇编”使用术语“顶级表格”,参考手册中的功能说明(评估顶级表格[nm])和(扩展顶级表格)将“顶级表格”作为其功能参数,但我不清楚“顶级表单”的定义。术语“顶级形式”在Racket语言中的含义是什么?这里的直觉是,这些函数都处理“顶级形式”,而不是依赖于词汇环境的形式。作为一个半明显的例子,eval只能处理顶级表单,这就是为什么: (let ([x 10]) (eval '(* 3 x))) 不起作用。“表单”的通常用法是指任何表单

Racket 如何使用球拍代码删除文件?

我想用racket删除一个文件。我正在使用以下代码 (delete-file c://foo.txt) 我收到了这个信息 reference to an identifier before its definition: c://foo.txt 顺便说一句,既然你问的是非常基本的问题,也许最好先读一读 顺便说一句,既然你问的是非常基本的问题,也许最好先读一读?我对类似Lisp的语言一无所知,但你的路径不应该是字符串吗?我对类似Lisp的语言一无所知,但你的路径不应该是字符串吗? (dele

Racket 如何使用First和Rest函数?

我试图使用First和Rest来迭代racket中的数字列表,但我不确定我是否正确使用了这些函数,因为代码不起作用 (define cubed (lambda (a) (* a a a))) (define (all-elements-cubed a) (cond [(empty? a) empty] [else (+ 1 (all-elements-cubed (cubed (first (rest a)))))])) (all-elements

从已键入的Racket联合中提取类型

我有一个类似于assoc的函数,它在列表中搜索一个符号并返回#f或列表中的位置 此函数的返回类型应该是#f和Natural,(U#f Natural)的并集 但是,当我想将该值用作数字时,它总是类型不匹配,因为该值不仅是一个自然值,而且实际上是一个并集 如何提取自然值并避免类型不匹配错误?Typed Racket有一个名为的功能,允许您使用谓词和断言筛选值的类型。基本思想是谓词,如string?、empty?和number?可以根据程序的控制流过滤类型 要说明这一点,请参见以下示例: (: na

Racket 球拍:在子模块中启用涂鸦语言

似乎lang语句在嵌套子模块中无效,并且上面的扩展模块版本缺少某些内容: 错误:模块:没有%module开始以模块的语言绑定 更新: 看起来这或多或少有效,但有更好的方法吗?scribble是否对未处理的输出端口执行某些操作 #lang racket/base (module x scribble/text @(display 123)) 首先,您的代码有一个可以删除的冗余%模块begin lang做了几件事——一件是控制文件的语义 通过确定初始导入的绑定集 模块表单在lang出现之前已经做

Racket 带球拍的SICP

有没有人有在课堂上学习英语的经验?它够成熟吗 新包服务器上有另一个版本的库。我认为它是基于尼尔的版本,但它确实有更新的更新。您可以通过运行以下命令找到它: raco pkg install sicp 或者在DrRacket中,进入文件->安装程序包…并在框中键入sicp,然后点击安装。我目前正在做第2章的最后几个问题,到目前为止,我已经使用Racket+Emacs(使用Racket模式,因为我可以快速运行它)处理所有代码。唯一的例外是“图片语言”部分——为了节省时间,我使用了SICP包 如果你

通过racket中的模块查找所需模块的列表

我想保留一个特定模块(比如说当前模块)所需模块的列表 我觉得还有其他一些选择,比如解析模块?这是可以尝试的,但我开始考虑隐藏require并将所需项添加到具有模块名的哈希表中。问题是我不知道如何为它编写语法定义 虽然不起作用,但函数定义等效项如下所示: (define require-list (make-hash)) (define require (lambda vals ; add vals to hash-table with key (current-namespace)

Racket 球拍:如何检查名单的大小?

我需要你帮我拍球拍 (define size1 (lambda (m) (printf "size is ~v" (length m)))) 测试一下 >(size1 '(2 8 9 0 'uu 98 0)) size is 7 哪一个好 , 但是第二次测试 > (size1 '((((7) 9 (11))))) size is 1 然而,这是给我的,因为布朗克特 我想提供的是3 我需要这方面的帮助请注意以下几点: '((((7) 9 (11)))

删除Racket列表中的括号

我试图编写一个代码,从列表的每个顶级元素中删除括号。例如,输入'((12)(34))将产生'(1234),输入'((x(y))z)应产生'(x(y)z) 有没有办法识别成对的括号?我想我可以找到一对括号并删除它们,但我不知道如何做,也不知道如何只从顶部元素删除 模式“我正在尝试(做一些事情)列表中的每个顶级元素”是一个肯定的迹象,表明map将参与其中。另外,在您的第一个示例中,有一个重要线索: '((1 2) (3 4)) => '(1 2 3 4) 那只是追加* (append*

输入“后的奇怪输出”;素数;关于Racket REPL中的标识符

今天,我在REPL中犯了一个打字错误,发现了一个奇怪的行为。下面是互动的一个示例: Welcome to Racket v6.11. > (define x 3) > x 3 > x' 3 > x 'x > 因此,我键入的第一个x产生了3,这是预期的结果。我意外输入的x'导致了3,这是出乎意料的。最后一个x导致'x(!!) 似乎我不明白REPL如何读取值。有人能解释一下REPL为什么会这样做吗?请参见racket邮件列表上的。两者都解释了这一点 第一行,x,是正

如何在Racket中将输入读取为字符串

如何在Racket中将输入读取为字符串 此代码从当前行读取输入,就像一行一样。如何从新行中阅读它 (let([x(读线(当前输入端口))])x);从这里读 ;点击“回车”按钮后将读取\换行符 它指的是什么?您输入的是什么?您可以使用“mode”标志,如so(define x(read line(当前输入端口)'return)),这是一个非常模糊的问题,但可能会有所帮助。您是在REPL中输入这一行代码,还是在文件中的较大程序中运行这一代码?如果是在REPL中,您是指用于将表达式传递给REPL的“回

关于DrRacket';中保存的连续体的不同输出;s定义窗口和交互窗口

我是个新手,我正在尝试使用call/cc。当我在定义窗口中放入以下代码时 对于DrRacket,运行它,然后在交互窗口中键入(saved-k 0),我会打印出3中的两个 #lang racket ; the definitions window (define saved-k #f) (define (f) (+ 1 (call/cc (λ (k) (set! saved-k k) 0)))) (+ 1 (+ 1 (f))) 我的理解是,保存的延续应该是(+1(+1(+1?

Racket 确定以编程方式定义哪些函数

如果可以,我想将对特定函数集的调用替换为对我的实现的调用,例如: (define (call-my-fn f . args) (cond [(eq? f append) (apply my-append args)])) 我所有的实现都在一个单独的文件中,我不想一直添加到cond子句中。有没有一种方法可以让我写出这样的东西: (require "my-fns.rkt") (define (call-my-fn f . args) (cond [(is-defined

Racket 动态生成rackunit测试套件:测试通过并引发异常

我试图动态生成一组测试用例 基本上,我想用不同的值运行相同的测试几次。也许有更好的方法,如果有,请告诉我,我还没有找到 我找到了maketestsuite,它说您可以向它传递一个测试用例实例列表 所以我做了一个for/fold循环,它将为每组值生成的测试用例收集到一个平面列表中 我不明白的是,它似乎成功地运行了所有测试,同时也引发了一个异常: tests->test-suite-action received #<void> in list of tests (#<voi

Racket 什么';这是球拍与其他球拍的区别;s findf和for/first函数?

Racket有一个findf功能,允许您在列表中查找第一个匹配元素 (findf even? '(1 2 3 4)) 但是,它还有一个for/first函数,它似乎也有同样的功能,尽管语法更复杂 (for/first ([n '(1 2 3 4)] #:when (even? n)) n) 两者之间的区别是什么,而且鉴于findf似乎要短得多,为什么我要使用作为/first 谢谢区别在于,for/first像for一样迭代,因此您可以使用球拍语法的全部功能: >(for/first([i'(

Racket 参数化需求

我正在从事一个项目,在这个项目中,我有一组常见的测试,以及被测试系统的各种潜在实现的选择。我希望能够用实现参数化测试模块 基本上,我有这样的想法: (module foo racket (define (dummy-function) 2)) (module bar racket (define (dummy-function) 4)) 然后想用下面的东西来测试它 (module test racket (require [STUFF]) (test-func

Racket 为什么球拍代码返回无效:数独

这是soduku解算器。我已经检查了解算器是否最终到达(if(equal?row 9),所以它得到了电路板。但是函数仍然返回#。我不知道为什么它不返回电路板 有人可以帮我吗?修复这些类型错误的一般规则: 如果它返回的是您不期望的内容(此处,#),则在函数中查找可能返回该内容的事例。您确定基本事例返回您期望的内容,但也必须检查其他事例 下一个案例中有一个开头,里面有一个。无论在任何迭代中返回什么样的主体表达式,表单总是返回# 因此,在您的情况下,它返回#。表单在每次迭代时计算循环体,但忽略返回值

Racket 当圆点通过某个点时,从我的游戏中移除生命?

我正在为一个班级设计一个游戏,其中: 一个彩色点从屏幕右侧出现,并沿固定水平轴在屏幕上向左移动 当圆点到达中间时,播放器需要按与其颜色对应的键。如果在正确的时间完成,分数将增加1 否则,玩家将失去一条生命 我遇到以下问题: [已解决]在游戏中以随机间隔向点列表添加新点。这将使点不会线性出现,两个点可以一个接一个地生成 [已解决]从左向右移动屏幕上的点 [已解决]删除位于hitbox区域的正确圆点 如果一个点离开屏幕,就删除一个生命 这里使用的语言是带有lambda的中级学生。 目前,当我

Racket 如何禁用球拍';s任何s表达式值输出

例如,我编写了一个球拍脚本: ; filename: hello.rkt #lang racket/base (displayln "hello") (+ 1 1) 并执行它: $ racket hello.rkt 输出为: hello 2 我不希望它打印数字“2”,如何禁用任何S表达式值输出的结果?您可以使用void放弃值,并begin将多个表达式组合在一起。例如 (void (begin (+ 1 1) (+ 2 2) (+ 3 3))) 这不会打印任何内容。您可以使用void放弃值

Racket 球拍内置重复功能

我在寻找一种方法来重复函数调用一定次数,并将结果累积到一个列表中,但在标准库中找不到任何结果,所以我写了一个。编写起来很简单,但这似乎是一件显而易见的事情,我觉得一定有一种公认的方法可以使用标准库函数来实现这一点 以下是我希望替换的两个函数: (define (repeat n f) (unless (<= n 0) (f) (repeat (sub1 n) f))) (define (accumulate n f) (let loop ([n n] [l emp

如何在Racket中编写if/else语句?

如何在此代码中编写if-else语句 我是人工智能新手,我们正在学习if/else语句。我不确定如何写else语句。我不断地犯错误 (define (nextmove location status) (if (eq? status 'dirty) 'suck 'no\idea)) 所以这里^^^我必须写一个if/else语句来打印以下内容 > (nextmove 'A 'dirty) 'suck > (nextmove 'B 'clean) 'left 然而,它

Racket 数据/采集中的球拍序列与内置序列

我一直在玩data/collection中的一些接口,到目前为止我很喜欢它。为不同的球拍集合(如列表、流和序列)提供通用接口非常方便——特别是考虑到其他类型的接口的多样性(list-*,vector-*,string-*,stream-*,sequence-*,…!) 但这些接口和Racket中的内置序列配合得好吗?具体来说,我遇到了以下错误: (require data/collection) (take 10 (in-cycle '(1 2 3))) => 。。。这是可行的,但是有一个解决

如何使我的Racket设计语言从外部文件运行脚本?

我在Racket中设计了一种自定义语言,我们称之为华夫格 假设我有 定义printstr。输入 如果是字符串?车辆输入 写入字符串联接输入 写入输入 ; ... 一大堆其他的定义 命令行 :多 [-v-verbose更详细的设置!日志级别add1日志级别] [-q-安静,安静设置!日志级别0] :一次 [-i-就地编辑就地设置!模式“就地” [-c-新建创建新文件集!模式为“新建” [-n-干运行不做任何设置!模式f] :每人一次 [-d-directory dir在给定目录集中工作!root

Racket 一大堆数字

我想写球拍函数查找子集。该函数生成不带辅助函数且仅使用lambda、cond、cons、rest、first和其他基本函数的数字列表的子集列表 例如,应满足以下检查要求: (check-expect (find-subsets '(2 2 3 3)) '(() (2) (3) (2 2) (2 3) (3 3) (2 2 3) (2 3 3) (2 2 3 3))) (check-expect (find-subsets '(1 2 3)) '(() (1) (2) (3) (1 2)

Racket 合同:如何接受任何匹配签名的功能?

我正试图写一个契约:接受一个函数,它至少接受一个参数,并返回一个布尔值 关键是,我只关心它返回一个布尔值,并且它接受一个或多个参数——例如,它可以是一个接受单个参数的函数,也可以是一个接受两个参数的函数,并且应该接受其中任何一个 以下是我尝试过的: 第一次尝试: 第二次尝试: 第三次尝试: 在上述每一种情况下,合同似乎都希望争议不仅包含在合同规范中,而且与之完全匹配。也就是说,例如,它必须是一个接受任意多个参数的函数,而不是一个接受2个参数的函数,这很好,因为我接受的是接受任意多个参数的函数 这

Racket &引用;未找到模块路径的集合:mzscheme";在球拍上跑弧线

我正在尝试让Arc(Paul Graham的Lisp方言)在运行macOS Catalina的iMac上运行,我下载了Arc源代码并安装了Racket。我按照问题中的一些提示来解决我遇到的一些问题,但是现在我在运行“racket-fas.scm”时收到了这个错误消息: 有什么办法可以解决这个问题吗?我不确定这是否是一个解决方案,所以我不会把它作为一个答案发布,但看起来你可能没有用于racket的mzscheme软件包。请尝试raco pkg安装mzscheme。我不确定这是否是一个修复程序,因此

Racket v5.1.1中的作用域缺陷?

有人告诉我这是Racket中的一个bug(v5.1.1) 这似乎是一个范围界定问题 (参见下面的代码和输出) 来自示例1的返回表明x不是 按应有的方式递增 在示例2和示例3中 函数example-2只是example-1的副本 从doit中删除反向指令 函数示例3(如您所见)是一个副本 也可以,但有一个附加参数 不改变任何东西,但当我在 cond语句将x显示为递增 (define (example-1 lst) (letrec([x 0] [doit (

Dr Racket尝试创建时失败]

我正在用BSL语言玩DrRacket 当我试图创建这样的评论时: ;;嗨(10,50) 该程序在键入“”时失败。我只能通过TaskManager结束它。它在TM中使用13个CPU 你们中有人对此有解决方案吗?或者干脆不使用它] 谢谢这是最近出现的一些错误,目前还没有修复。这可能是一些非英语键盘布局的结果(在这些报告中就是这种情况)。希望它很快会得到修复 更新:该错误在下一版本中已修复,但与此同时,Matthew发布了一些关于如何进行临时修复的说明——此处重复以供参考: 我们已经找到了一个在需要

Racket 球拍作业的解决方案

我不熟悉racket编程语言。 我需要在racket中提供一个解决方案,但我无法写出有效的东西 问题: 定义一个max-gap函数,该函数使用五个整数,并返回任意两个整数中的最大间隔(以绝对值表示,即自然数)(按它们出现的顺序)。例如,(最大间隙13-11)将返回4。您可能需要使用球拍功能max,abs 输出,例如: (测试(最大间隙15-16 22)=>16) 例如: > (max-gap 1 3 -1 1 1) 4 > (max-gap 1 5 -1 6 22) 23 如果您发

Racket 球拍-比较/分析两种结构

因此,我有一个任务,具有以下标准: 给出了欧氏距离函数的定义。此函数用于计算xy平面中两点之间的距离。这些点以四个独立的数字给出:x1、y1、x2和y2 重写函数,使其接受两个参数(均为Posn类型),并运行相同的计算 > (define the-origin (make-posn 0 0)) > (define some-point (make-posn 3 7)) > (euclidean-distance the-origin some-point) #i7.615773

Racket 替换语法对象中的变量

我想将语法对象中出现的所有v1(或(和v1 v2)(和v1 v3))替换为v4,以获得#'(或(和v4 v2)(和v4 v3))。在球拍中最简单的方法是什么?我应该将语法转换为列表还是字符串以替换并将其转换回语法?将与语法一起使用 (with-syntax ([v1 #'v4]) #'(or (and v1 v2) (and v1 v3))) 输出: #<syntax:3:4 (or (and v4 v2) (and v4 v3))> 如果要在宏中使用replace id,请

上一页   1   2   3   4    5   6  ... 下一页 最后一页 共 25 页