Scheme 重写匹配lambda

作为练习,我试图定义一个规则match rewriter,其行为与match lambda相同,但如果未找到匹配项,则返回其参数。到目前为止,我有: (define-syntax match-rewriter (syntax-rules () ((_ (patt body) ...) (λ (x) (match x (patt body) ...))))) 如果找到匹配项,它似乎工作得很好 但是,如果没有找到匹配项,我不知道如何返回参数x 我知道如果没有找到匹配项,ma

Scheme 从方案列表中删除空元素

调用(数字中的过滤器?'(a2(13)b7))产生(()2()()7) 如何从生成的列表中跳过空元素以获得(27)的最终结果 问题是您正在将sxpr中的过滤器映射到列表。您可以运行另一个筛选器过程来删除空值,或者在aux中使用修改过的筛选器,如下所示: (define filter-in (lambda (predicate list) (let((f (lambda (l) (filter-in-sexpr predicate l))))

在Racket/Scheme中,这种形式的语法大小写有什么用法

我被关于用法语法案例的文档弄糊涂了,但是f可能意味着什么呢 (define-syntax (check stx) (syntax-case stx () [(f (x y)) #'(list 'second: f x y)])) 这段代码以一种相当微妙的方式被破坏 首先, (define-syntax (check stx) (syntax-case stx () [(f (x y)) #'(list 'second: f

Scheme 为什么可以';这个宏不能执行吗?

我有以下愚蠢的测试: (define-syntax a (lambda (stx) (syntax-case stx () [(k e s) #'(let ((show display)) (e s))]))) (a show "something") 为什么这个不行?(DrRacket中显示的错误是:show中的模块中的扩展:未绑定标识符 但是,以下方法可以起作用: (define-syntax a (lambda (stx) (syntax-case stx ()

Scheme 如何创建一个将1和“1”之间的所有数字相乘的函数;x";有时间吗?

我在做一个函数,用dotimes循环将1输入和x输入之间的所有数字相乘。若你们愿意的话,请检查我的函数,并说明出了什么问题,因为我对方案中的循环不太了解 (define (product x) (let ((result 1)) (dotimes (temp x) (set! result (* temp (+ result 1)))) result)) 使用递归。这是做事情的方法。不要使用set和其他更改变量的函数,除非真的没有其

Scheme 我如何评估';s作为符号返回

我们在我的类中处理数据表示,我们必须将整数表示为diff树。对我来说是零?类我想实际计算diff树,看看它是否为0。但是,我的所有过程都返回符号。我不知道如何使方案评估程序 差异树::=(一)|(差异树差异树) (前身)(一))=(差异(一)(一)) 所以如果我有(是零?(前置词(一))|注意:它必须把它作为一个符号 它的计算结果为(是零?'(差(一)(一))) 我如何得到它,以便我可以实际计算作为一个函数的差异? 我已经有了(define diff-)(define(one)1),所以如果我只

在Scheme或Racket中检测函数的调用方

在Scheme或Racket中是否可以检测函数的调用方 例如,我可以编写一个函数来测试列表是否为原子列表,如下所示: (define atom? (lambda (x) (and (not (pair? x)) (not (empty? x))))) (define lat? (lambda (l) (define latt? (lambda (l) (cond

Scheme 用球拍做输入的最佳方法?

在racket中读取stdin输入的最佳方法是什么 特别是我想从C++中选择 CIN > C,在这里我指定我要读取的东西的类型,然后返回它们。 < P>我将使用 Read < /Cuff>程序。如果事先知道要读取的数据类型,请使用读取字符,读取字符串,读取字节 另外,看看Scheme中读取格式化输入-ascanf的实现。您几乎可以做任何您想做的事情。。。在低级别,我建议使用(读取行)和(读取字节)。对于更高级别的处理(例如scanf),我建议在输入上进行regexp匹配。比如说 (regexp

Scheme-查找嵌套列表中最深的值

几天前,我问过关于找到那个人的事。我实现了给出的想法,并且它起了作用 但还有另一个问题:我还需要从嵌套列表构建一个列表。意思:如果我将(8)和(10 11 12)更改为leaf1和leaf2,我需要返回:”(ans(leaf1(8))(leaf2(10 11 12))/ans是一个引号 换言之: 我的功能将得到支持 (1(23)(4(5)(7(8)(10112‘‘‘‘‘)=>最嵌套的列表是(8)和(10112)=>我的函数将返回”(ans(leaf1(8))(leaf2(10112)) 我正试图

Scheme 嵌套循环方案

比如说我有 (define sample '("a" "b" "c")) 我将如何创建一个嵌套循环来处理示例 (define (runthis a) (cond (char? (car a)) ;given that this condition is true I go on to the nested loop (define (work sample) <dosomething> (work (cdr sample))))

在Scheme中更改图像的颜色

我正在制作一个改变形象的程序,以模仿奥巴马的竞选海报。图像映射假定获取每个像素并将它们相加以获得一个和,然后在cond语句中检查该和,以查看将替换它的颜色。到现在为止,我得到了 (define obamicon (lambda (clr2) (image-map (lambda (clr1) (image-ref clr1 (+ (color-ref clr1 'red)(color-ref clr1 'green)

Scheme 将名称与相等项进行比较

如何比较名称,如本例: (if (= name '(bill)) (write-line '(over))) ?首先,您不太可能希望名称是'(bill),它是由单个符号'bill组成的列表。您可能只需要直接购买”账单。其次,不能使用=进行符号比较:=用于数字比较符号=?可能就是您想要的: (if (symbol=? name 'bill) ...) (请注意,这里还有一些其他相等函数也可以使用,您可能会看到其他人使用eq?或equal?代替symbol=?。用于测试相等性的过程取决于要比较的

Scheme 球拍语言的变化与发展;模块问题

我正在尝试在Racket中实现一些SICP图形程序,但存在两个问题: 当我需要使用“let”时,我不能使用初学者语言。 当我尝试更改语言或在使用“高级”语言时打开新文件时,会出现以下错误: module: identifier already imported from a different source 尝试通过加载映像模块时出错(需要2htdp/image) 发生什么事了?此外,是否有更好的方法在Scheme中使用图像进行培训?不清楚您首先为什么要使用2htdp/image。尼尔·范·戴

Scheme DrRacket程序正文帮助(布尔奇数?x)

奇数的迭代版本?对于非负整数,可以使用and、or和not编写参数。要做到这一点,您必须利用and和or是按从左到右的顺序计算其参数的特殊形式这一事实,一旦确定了值就立即退出。写入(布尔奇数?x)时不使用if或cond,而是使用and、or、not(布尔值)。您可以使用+和-,但不能使用商、余数、/等。如果两个数等分,则数字为偶数;如果一个数的余数为1,则数字为奇数。一般来说,当你将一个数k除以一个数n时,余数是集合{0,1,…n-1}的一个元素。您可以通过询问当k除以n时,余数是否在某个特权余

在Scheme中将字符串转换为整数

如何将一串数字转换为整数? 我想把“365”转换成365 我所尝试的, string->list然后char->integer,但这会返回该整数的ASCII值,我如何获得该整数 请帮助。试试:字符串->数字 > (string->number "1234") 1234 从字符串解析整数的另一种解决方案: #lang typed/racket (: numerical-char->integer (-> Char

Scheme 如何更改DrRacket中R6RS的打印行为,以便像使用#lang racket一样打印结果

当我在IDE中运行一个程序时,版本5.3.5--2013-06-18(-/f),用于#lang racket,例如 #lang racket (+ 4 5) (/ 10 2) 按Run>时,交互窗口将打印到交互窗口中的“9\n5\n”。与R6RS #!r6rs (import (rnrs base)) (+ 4 5) (/ 10 2) 当语言为R6RS时,按Run>似乎没有输出。在首选项中,是否有任何地方可以改变这种行为?就我个人而言,我认为依靠打印顶级表达式是不可取的。(当然,如果你在

Scheme 在列表列表中的子列表的开头插入元素

我的作业有点麻烦。我必须创建一个过程,请求列表和元素的列表,并继续将元素添加到每个子列表的第一个位置。我成功地做到了这一点,看起来是这样的: (define (add-element lst elem) (foldr cons lst (list elem))) (define (insert-first lst1 x) (cond [(empty? lst1) empty] [else (local [(define insert (add-element(first

scheme中的撇号类型是什么

我有使用成员函数的条件: (cond ((member '1' (some-function)) (display #t)) (else (display #f))) 它工作正常,但我仍然无法找到以下问题的答案: 1) “1”的类型是什么 2) 我有下一个表达式 (λ(x)(=x1)) 如何转换为相同类型的“1”?'x与(引号x)相同。Scheme不会计算参数,所以基本上就是如何计算常量值。这不是一个单独的引用,而是在示例中引用的列表中有两个元素,如下所示: (cond ((member '1

Scheme reduce上的方案使用与算子

我正在尝试对reduce使用逻辑操作,例如: (reduce and '(#t #t #t) 0) 这给了我一个错误,我不知道为什么 (reduce + '(1 2 3) 0) 这很好,但是当我尝试使用内置的和操作时,它失败了。 有人能解释一下为什么这个不行吗?我被迫在逻辑运算中使用reducereduce需要一个函数作为其第一个参数,而和是一种特殊形式。由于特殊形式不是第一类对象,因此它们不能用作函数的参数(或存储在变量中) 在这种情况下,reduce的替代方法是 (every ident

Scheme 方案解释器中的向上箭头发送^[[A,而不是返回历史

我正在运行mit-scheme-x86-64并阅读SICP 由于某些原因,上下箭头的行为与终端/其他解释器中的行为不同 它们分别发送^[[A和^[[B] 我试着在我的.bashrc中这样做,但没有成功 bind '"^[[A":history-search-backward' bind '"^[[B":history-search-forward' 实际上,我不太确定我应该做什么。尝试使用以下方法: rlwrap运行指定的命令,拦截用户输入,以便 提供readline的行编辑、持久历史记录和完

Scheme 球拍附加不希望的列表反转

我编写了一个小函数,它接受一个列表并返回一个仅由正数组成的列表。这一切都很好,但出于某种原因,它正在颠倒顺序。更多信息如下。有人能告诉我这是否正常,或者我是否错过了一些东西?先谢谢你 (define (positive-nums-only lst) (if (empty? lst) '() (append (positive-nums-only (cdr lst)) (if (>= (car lst) 0)

scheme递归-整数的幂

我试图实现一个函数,它告诉我们参数是否是2的幂。这是我的 (define (powof2 x) (cond [(and (even? x) (> x 1)) ((powof2 (/ x 2)))] [else (equal?(x 1))])) 但是当我尝试使用参数12运行它时,我得到的错误是: 错误:3不是函数[POWO2,POWO2,POWO2,(anon)] 有什么帮助吗 谢谢 啊,那些括号;-) 请注意,在第3行和第4行中,您有一对额外的括号,在第4行中,

Scheme/Lisp中的迭代范围函数

我想实现范围函数(start,end,inc),它以inc的增量从开始到结束生成所有自然数。 这是第一个版本: (define (gen start end step) (if (>= start end) '() (cons start (gen (+ step start) end step)))) 问题是,这不是尾部递归。另一种尝试: (define (gen-iter start end step acc) (if (>= start end) ac

Scheme 每个球拍的这个数字是多少

23号是干什么用的 (for-each (lambda (arg) (printf "Got ~a\n" arg) 23) '(1 2 3 4)) 即使没有“23”,代码也可以运行。这是为了说明示例代码上方的行中所写的内容。。。程序结果(在本例中为23)将被忽略 由于它被忽略,您可以输入任何其他值,甚至可以不输入任何值。for each是map的一个特殊版本,它完全忽略每个应用程序的返回值,并且不生成结果列表。如果

Scheme 使用λ;定义球拍中的功能

以下功能工作: (define (testfn) (define (contains sl item) (ormap (λ(x)(equal? item x)) sl)) (if (contains (list 1 2 3) 2) "yes" "no")) (testfn) 输出: "yes" 但使用λ符号的下列内容不适用: (define (testfn2) (λ (contains sl item) (ormap (λ(x)(equal? item x))

Scheme 使用中缀符号的算术计算

以下函数用于计算带括号的中缀符号: (define (mycalc ll) (cond [(= 1 (length ll)) (first ll)] [(empty? (flatten(rest ll))) (first ll)] [(= 2 (length ll)) (printf "Error: only 2 elements: ~a" ll) (exit)] [(list? (first ll))

cons返回一个列表,并在scheme中配对

我刚开始学习这个计划。我的问题是为什么CONS34返回一个列表34,而CONS3返回一对4。3.如果cons 3 4返回3。4也是吗?3 4和3。4是列表cons 3 cons 4',如果输入'3'。4在您的回复中,您很可能会看到'3 4'作为结果 您看到的差异只是一种输出约定;cdr为列表的对不使用点符号打印

Scheme DrRacket函数程序

我试图解决的问题描述如下:, 注意:scheme函数应该是编写的,并且能够在DrRacket中运行 make5-获取两个整数,并返回由第一个输入的最右3位数字和第二个输入的最左2位数字构成的5位整数。例如,(make5 561432 254)将返回43225 任何一个输入数字上的负号都应该被忽略,也就是说,(make5 561432-254)也将返回43225 如果第一个数字少于三位数,或最后三位数以零开头,和/或第二个数字少于两位数,则函数应返回-2。注意:您可能需要定义一些辅助函数 到目前为

Scheme 在“a”中反转简单函数;“创造性”;打球

我需要一些帮助:D 我编写了以下过程,将字符串转换为数字列表: (define (string->encodeable string) (map convert-to-base-four (map string->int (explode string)))) 我需要一个函数,它的作用正好相反。换句话说,获取以4为基数的数字列表,将其转换为以10为基数,然后创建一个字符串。是否有一种“创造性”的方法来逆转我的功能,或者我必须重新编写每一个相反的步骤。非常感谢您的帮助。取决于您

Scheme 删除相邻的重复项

我想实现一个函数,该函数以列表作为输入,并以值的形式返回相同的列表,其中任何重复元素的序列都减少为单个元素: 例如: (remove-adjacent-duplicates ’(y a b b a d a b b a d o o)) ; the return'(y a b a d a b a d o) (remove-adjacent-duplicates ’(yeah yeah yeah)) ;the return '(yeah) 我已通过以下代码实现了这一点: (define (remo

Scheme 如何在webassembly程序中执行回调?

我正在研究scheme to javascript编译器。我正在仔细研究以webassembly(wasm)为目标的想法 我想要的是执行存在于wasm程序中的回调,特别是我不能仅依赖wasm导入或导出。。。但我可能错了 到目前为止,我的实验都依赖于通过emscripten将scheme翻译成JavaScript或webassembly 对于JavaScript,DOM事件可以绑定到scheme过程,因为scheme过程被转换为JavaScript 在emscripten中,我创建了两个依赖于re

Scheme 在方案(Fluent)中用变量或循环替换数字不';行不通

我正在使用ANSYS Fluent程序进行CFD模拟。这个程序允许使用所谓的日志文件部分自动化模拟设置,我刚刚知道这个日志文件是用Scheme编写的。不幸的是,我甚至从未听说过Scheme,我只知道它是一种Lisp方言(我对它也一无所知) 我正试图通过使用一个循环来自动设置一组模拟参数,从而自动化一些枯燥的任务。如果我从Fluent的命令界面运行此命令: (cx gui执行cx设置列表选择“边界条件*表1*列表2(区域)”(4)) 它执行预期的操作(从列表中选择项目4)。但是,如果我将其放入一

如何在Scheme中编写反向函数?

我必须编写一个scheme函数,它执行以下操作: 定义一个名为revp的SCHEME函数,该函数将一对作为参数并计算为 另一对,其第一和第二元素按相反顺序排列在对p中。比如说, ( rev ( cons 1 2)) > (2 . 1) 这是我的密码: (define (rev p) (cond ((null? p) '()) (not (pair? (car p)) p) (else (append (rev (cdr p)) (list (rev (

Scheme 置换方案码的解释

以下是生成元素列表排列的方案代码: (define (remove x lst) (cond ((null? lst) '()) ((= x (car lst)) (remove x (cdr lst))) (else (cons (car lst) (remove x (cdr lst)))))) (define (permute lst) (cond ((= (length lst) 1) (list lst)) (else (

Scheme x和x的集合在let in方案中不起作用

我试图在方案中运行此行: (let((x y)(y x))(set!x x)(set!y y)) 其中,在程序开始时,x定义为1,y定义为2。 我希望输出是x=2和y=1,但是我得到x=1和y=2 谢谢你的帮助 在这个表达式中: (set! x x) 两个x引用相同的变量,即let绑定引入的变量。在let内部对x所做的任何更改(此处,实际值不变)在let外部都不可见,因为在let外部,x符号绑定到另一个变量 如果重命名临时变量a和b,例如: (let ((a y) (b x)) (set! x

Scheme 为什么我的n-queens代码返回空列表?

我现在正在处理。我知道我的邻接位置函数有问题,因为当我用 (define (adjoin-position-WORKING new-row k rest-of-queens) (cons (list new-row k) rest-of-queens)) 我从queens获得了合理的输出 在此替换之前,我使用练习模板的代码如下: #lang sicp ;;Boilerplate functions that the exercise calls: (define (filter pre

Scheme 方案与if条件

例如,当条件不满足时,我不想返回任何内容 (if x y z) 所以如果不满足x,z将被执行,我不想在z处做任何事情,就像pythons“pass”From: 语法:(如果测试结果可选) 语法:(如果是测试结果) 语义:一个if表达式 评估如下:首先,测试是 评价的。如果它产生一个真值 (见第6.3.1节),然后 其值为(are) 返回。除此之外,另一种方法是 已评估,其值为 返回如果测试产生错误 值,且未指定替代值, 那么表达式的结果是 未指定。 因此,如果表达式变为: (if x y)

Scheme 使用当前函数进行求值';s名称空间

以下球拍功能产生错误: reference to undefined identifier: val 这是因为eval函数查看的是全局名称空间,而不是本地函数的名称空间。如何欺骗eval使用本地函数的名称空间 (define some-eval! (lambda (val row col) (eval (list 'define 'ttboard '(list-builder val row col))) (current-namespace) )) 你的问题是针对球拍的。一般来

Scheme 方案-定义列表与符号

我试图找出方案中发生的有趣事情: (define last-pair (lambda (x) (if (null? (cdr x)) x (last-pair (cdr x))))) 当我这样定义foo时: (define foo (lambda () (let ((s (list 'he 'said:))) (set-cdr! (last-pair s) (list '

Scheme 数字出现的次数

好的,我上学期参加了这个计划,我知道你们不可能在一个学期内就这么擅长这个计划。一位朋友问我如何计算某个数字在一个数字中出现的次数。如果是一张单子,我知道该怎么办。起初我认为这是一个简单的使用内置商或余数,但并没有结束,它看起来像我。例如,如何计算数字中出现5的次数:(numfives 125458563)应返回3。感谢您的帮助 我不是在帮助他,我是为自己。我喜欢挑战 然后将一个数字转换为一个列表,然后找出一个数字在一个数字中出现的次数。 用于将数字转换为列表,使用string->list将字符串

Scheme 方案限制和长度

我正在学习scheme,我刚刚遇到了第一个问题: (define x (cons (list 1 2) (list 3 4))) (length x) 3 为什么输出是3而不是2?我展示了x ((1 2) 3 4) 为什么是那样而不是((12)。(34)) 谢谢。也许这样更容易理解 你有: (cons (list 1 2) (list 3 4)) 如果你 (define one-two (list 1 2)) 你有 (cons one-two (list 3 4)) 这相当于 (con

Scheme 如何在R5RS中编程?

我需要帮助在dr racket中用r5rs的语法对其进行编码。调整函数,使其计算前n个偶数之和您在问题中没有提供足够的信息来给出准确答案。哦,好吧,只是为了好玩,让我们看看如何使用流解决这个问题。假设您已安装,以下内容将在R5RS下工作: ; import streams library (#%require srfi/41) ; generate an infinite stream of numbers ; starting at x, with an n increment (defin

Scheme 球拍随机函数

我的随机函数有问题。我在以下位置设置了一个功能: (define random-abcd (cond [(equal? (random 4) 0) 'A] [(equal? (random 4) 1) 'B] [(equal? (random 4) 2) 'C] [else 'D] )) 然而,当我运行此选项时,它比其他任何选项都要频繁。似乎代码中的[其他…]比其他选择发生得更多,这意味着它不是以相同的概率进行选择。有什么办

Scheme-用索引替换列表中的元素

我试图用其位置替换方案列表中的元素。 例如,呼叫: (position '((a b) c)) 应返回: '((0 1) 2) 到目前为止,我的代码保持列表格式,但索引没有更新 (define (position term1) (define index 0) (cond [(null? term1) '()] [(list? term1) (cons (position (car term1)) (position(cdr term1)))]

scheme语言中具有较少点的等价物?

在scheme语言中,这些具有少量点的等效结构是什么 “((a.b.c.d)。” "(a(b)) “(a.(b.c)) "(一(二)(三)) 例如:对于“(a.(b.(c.(d)()))”),等价物是(a、b、c、d、e) 这就像在解释器中评估表达式并观察打印的内容一样简单: '((((a . b) . c) . d)) '((a b)) '(a b . c) '(a (b . c)) 请记住:点表示法只是一种约定,它在列表结构不正确时显示(也就是说,它不会以空列表结束)。这就是为什么打印的内

Scheme Dr Racket模块中的未绑定标识符

只是试着做一个简单的程序来开始学习Scheme,我一直收到这个错误消息。这是我的密码: #lang racket (define (1+) (+ 1 x)) 我得到了错误“模块中的未绑定标识符”解决了它。。。我需要这个变量的名字 (define (1+ x) (+ 1 x))

Scheme 如何计算单独代码文件中if语句的数量

我正试图编写一个scheme程序来计算包含代码的文件中if语句的数量。我知道如何读取文件,但我不知道如何计算if语句的数量。一种简单的方法可以是如下递归结构: (define (count-ifs exp) (+ (if-expression? exp 1 0))) (if (pair? exp) (+ (count-ifs (car exp)) (count-ifs (cdr exp)))) 0))) 但这可能算得太多了 更正确的方法是通过检

在Scheme中减少bool表达式

作为Scheme实践的一部分,我正在设计一个算术表达式eval。假设给我一个表示任意布尔表达式的列表,另一个关联列表包含表示布尔文本值的对的列表。我想做的是简化/减少布尔表达式,使其降到较低的形式 以下是一个例子: '(a and (b or c)) and '((a . #t) (b . #f) (c . #t))) 应减少到#t 应该减少到只有'a 为了简化,我不想处理双重否定,即不(不是b)。此外,所有一元或二元布尔表达式都包含在一对括号中(即a或b或c将是(a或(b或c)) 我一直在瞎

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