作为练习,我试图定义一个规则match rewriter,其行为与match lambda相同,但如果未找到匹配项,则返回其参数。到目前为止,我有:
(define-syntax match-rewriter
(syntax-rules ()
((_ (patt body) ...)
(λ (x) (match x (patt body) ...)))))
如果找到匹配项,它似乎工作得很好
但是,如果没有找到匹配项,我不知道如何返回参数x
我知道如果没有找到匹配项,ma
调用(数字中的过滤器?'(a2(13)b7))产生(()2()()7)
如何从生成的列表中跳过空元素以获得(27)的最终结果 问题是您正在将sxpr中的过滤器映射到列表。您可以运行另一个筛选器过程来删除空值,或者在aux中使用修改过的筛选器,如下所示:
(define filter-in
(lambda (predicate list)
(let((f
(lambda (l)
(filter-in-sexpr predicate l))))
我被关于用法语法案例的文档弄糊涂了,但是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
我有以下愚蠢的测试:
(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 ()
我在做一个函数,用dotimes循环将1输入和x输入之间的所有数字相乘。若你们愿意的话,请检查我的函数,并说明出了什么问题,因为我对方案中的循环不太了解
(define (product x)
(let ((result 1))
(dotimes (temp x)
(set! result (* temp (+ result 1))))
result))
使用递归。这是做事情的方法。不要使用set和其他更改变量的函数,除非真的没有其
我们在我的类中处理数据表示,我们必须将整数表示为diff树。对我来说是零?类我想实际计算diff树,看看它是否为0。但是,我的所有过程都返回符号。我不知道如何使方案评估程序
差异树::=(一)|(差异树差异树)
(前身)(一))=(差异(一)(一))
所以如果我有(是零?(前置词(一))|注意:它必须把它作为一个符号
它的计算结果为(是零?'(差(一)(一)))
我如何得到它,以便我可以实际计算作为一个函数的差异?
我已经有了(define diff-)(define(one)1),所以如果我只
在Scheme或Racket中是否可以检测函数的调用方
例如,我可以编写一个函数来测试列表是否为原子列表,如下所示:
(define atom? (lambda (x) (and (not (pair? x)) (not (empty? x)))))
(define lat? (lambda (l)
(define latt?
(lambda (l)
(cond
在racket中读取stdin输入的最佳方法是什么
特别是我想从C++中选择 CIN > C,在这里我指定我要读取的东西的类型,然后返回它们。 < P>我将使用 Read < /Cuff>程序。如果事先知道要读取的数据类型,请使用读取字符,读取字符串,读取字节
另外,看看Scheme中读取格式化输入-ascanf的实现。您几乎可以做任何您想做的事情。。。在低级别,我建议使用(读取行)和(读取字节)。对于更高级别的处理(例如scanf),我建议在输入上进行regexp匹配。比如说
(regexp
几天前,我问过关于找到那个人的事。我实现了给出的想法,并且它起了作用
但还有另一个问题:我还需要从嵌套列表构建一个列表。意思:如果我将(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))
我正试图
比如说我有
(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))))
我正在制作一个改变形象的程序,以模仿奥巴马的竞选海报。图像映射假定获取每个像素并将它们相加以获得一个和,然后在cond语句中检查该和,以查看将替换它的颜色。到现在为止,我得到了
(define obamicon
(lambda (clr2)
(image-map (lambda (clr1) (image-ref clr1 (+ (color-ref clr1 'red)(color-ref clr1 'green)
如何比较名称,如本例:
(if (= name '(bill)) (write-line '(over)))
?首先,您不太可能希望名称是'(bill),它是由单个符号'bill组成的列表。您可能只需要直接购买”账单。其次,不能使用=进行符号比较:=用于数字比较符号=?可能就是您想要的:
(if (symbol=? name 'bill) ...)
(请注意,这里还有一些其他相等函数也可以使用,您可能会看到其他人使用eq?或equal?代替symbol=?。用于测试相等性的过程取决于要比较的
我目前正在进行SICP的练习1.29,我的程序不断给我以下错误:
+:期望类型作为第二个参数,给定:#;其他参数为:970299/500000
下面是我使用racket运行的代码:
(define (cube x)
(* x x x))
(define (integral2 f a b n)
(define (get-mult k)
(cond ((= k 0) 1)
((even? k) 4)
(else 2
我正在尝试在Racket中实现一些SICP图形程序,但存在两个问题:
当我需要使用“let”时,我不能使用初学者语言。
当我尝试更改语言或在使用“高级”语言时打开新文件时,会出现以下错误:
module: identifier already imported from a different source
尝试通过加载映像模块时出错(需要2htdp/image)
发生什么事了?此外,是否有更好的方法在Scheme中使用图像进行培训?不清楚您首先为什么要使用2htdp/image。尼尔·范·戴
奇数的迭代版本?对于非负整数,可以使用and、or和not编写参数。要做到这一点,您必须利用and和or是按从左到右的顺序计算其参数的特殊形式这一事实,一旦确定了值就立即退出。写入(布尔奇数?x)时不使用if或cond,而是使用and、or、not(布尔值)。您可以使用+和-,但不能使用商、余数、/等。如果两个数等分,则数字为偶数;如果一个数的余数为1,则数字为奇数。一般来说,当你将一个数k除以一个数n时,余数是集合{0,1,…n-1}的一个元素。您可以通过询问当k除以n时,余数是否在某个特权余
如何将一串数字转换为整数?
我想把“365”转换成365
我所尝试的,
string->list然后char->integer,但这会返回该整数的ASCII值,我如何获得该整数
请帮助。试试:字符串->数字
> (string->number "1234")
1234
从字符串解析整数的另一种解决方案:
#lang typed/racket
(: numerical-char->integer (-> Char
当我在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>似乎没有输出。在首选项中,是否有任何地方可以改变这种行为?就我个人而言,我认为依靠打印顶级表达式是不可取的。(当然,如果你在
我的作业有点麻烦。我必须创建一个过程,请求列表和元素的列表,并继续将元素添加到每个子列表的第一个位置。我成功地做到了这一点,看起来是这样的:
(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
我有使用成员函数的条件:
(cond ((member '1' (some-function)) (display #t)) (else (display #f)))
它工作正常,但我仍然无法找到以下问题的答案:
1) “1”的类型是什么
2) 我有下一个表达式
(λ(x)(=x1))
如何转换为相同类型的“1”?'x与(引号x)相同。Scheme不会计算参数,所以基本上就是如何计算常量值。这不是一个单独的引用,而是在示例中引用的列表中有两个元素,如下所示:
(cond ((member '1
我正在尝试对reduce使用逻辑操作,例如:
(reduce and '(#t #t #t) 0)
这给了我一个错误,我不知道为什么
(reduce + '(1 2 3) 0)
这很好,但是当我尝试使用内置的和操作时,它失败了。
有人能解释一下为什么这个不行吗?我被迫在逻辑运算中使用reducereduce需要一个函数作为其第一个参数,而和是一种特殊形式。由于特殊形式不是第一类对象,因此它们不能用作函数的参数(或存储在变量中)
在这种情况下,reduce的替代方法是
(every ident
我正在运行mit-scheme-x86-64并阅读SICP
由于某些原因,上下箭头的行为与终端/其他解释器中的行为不同
它们分别发送^[[A和^[[B]
我试着在我的.bashrc中这样做,但没有成功
bind '"^[[A":history-search-backward'
bind '"^[[B":history-search-forward'
实际上,我不太确定我应该做什么。尝试使用以下方法:
rlwrap运行指定的命令,拦截用户输入,以便
提供readline的行编辑、持久历史记录和完
我从中复制了这个示例,它工作得很好,就像我只是简单地输入了->
dashPlus = #(let ((m (make-music 'ArticulationEvent
'articulation-type "accent")))
(set! (ly:music-property m 'tweaks)
(acons 'font-size -3
(ly:music-pr
我编写了一个小函数,它接受一个列表并返回一个仅由正数组成的列表。这一切都很好,但出于某种原因,它正在颠倒顺序。更多信息如下。有人能告诉我这是否正常,或者我是否错过了一些东西?先谢谢你
(define (positive-nums-only lst)
(if (empty? lst)
'()
(append (positive-nums-only (cdr lst))
(if (>= (car lst) 0)
我试图实现一个函数,它告诉我们参数是否是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行中,
我想实现范围函数(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
23号是干什么用的
(for-each (lambda (arg)
(printf "Got ~a\n" arg)
23)
'(1 2 3 4))
即使没有“23”,代码也可以运行。这是为了说明示例代码上方的行中所写的内容。。。程序结果(在本例中为23)将被忽略
由于它被忽略,您可以输入任何其他值,甚至可以不输入任何值。for each是map的一个特殊版本,它完全忽略每个应用程序的返回值,并且不生成结果列表。如果
以下功能工作:
(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))
以下函数用于计算带括号的中缀符号:
(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))
我刚开始学习这个计划。我的问题是为什么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中运行
make5-获取两个整数,并返回由第一个输入的最右3位数字和第二个输入的最左2位数字构成的5位整数。例如,(make5 561432 254)将返回43225
任何一个输入数字上的负号都应该被忽略,也就是说,(make5 561432-254)也将返回43225
如果第一个数字少于三位数,或最后三位数以零开头,和/或第二个数字少于两位数,则函数应返回-2。注意:您可能需要定义一些辅助函数
到目前为
我需要一些帮助:D
我编写了以下过程,将字符串转换为数字列表:
(define (string->encodeable string)
(map convert-to-base-four (map string->int (explode string))))
我需要一个函数,它的作用正好相反。换句话说,获取以4为基数的数字列表,将其转换为以10为基数,然后创建一个字符串。是否有一种“创造性”的方法来逆转我的功能,或者我必须重新编写每一个相反的步骤。非常感谢您的帮助。取决于您
我想实现一个函数,该函数以列表作为输入,并以值的形式返回相同的列表,其中任何重复元素的序列都减少为单个元素:
例如:
(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
emscriptenwebassembly
我正在研究scheme to javascript编译器。我正在仔细研究以webassembly(wasm)为目标的想法
我想要的是执行存在于wasm程序中的回调,特别是我不能仅依赖wasm导入或导出。。。但我可能错了
到目前为止,我的实验都依赖于通过emscripten将scheme翻译成JavaScript或webassembly
对于JavaScript,DOM事件可以绑定到scheme过程,因为scheme过程被转换为JavaScript
在emscripten中,我创建了两个依赖于re
标签: Scheme
simulationfluid-dynamics
我正在使用ANSYS Fluent程序进行CFD模拟。这个程序允许使用所谓的日志文件部分自动化模拟设置,我刚刚知道这个日志文件是用Scheme编写的。不幸的是,我甚至从未听说过Scheme,我只知道它是一种Lisp方言(我对它也一无所知)
我正试图通过使用一个循环来自动设置一组模拟参数,从而自动化一些枯燥的任务。如果我从Fluent的命令界面运行此命令:
(cx gui执行cx设置列表选择“边界条件*表1*列表2(区域)”(4))
它执行预期的操作(从列表中选择项目4)。但是,如果我将其放入一
我必须编写一个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
permutationdefinition
以下是生成元素列表排列的方案代码:
(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 (
我试图在方案中运行此行:
(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
我现在正在处理。我知道我的邻接位置函数有问题,因为当我用
(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
例如,当条件不满足时,我不想返回任何内容
(if x y z)
所以如果不满足x,z将被执行,我不想在z处做任何事情,就像pythons“pass”From:
语法:(如果测试结果可选)
语法:(如果是测试结果)
语义:一个if表达式
评估如下:首先,测试是
评价的。如果它产生一个真值
(见第6.3.1节),然后
其值为(are)
返回。除此之外,另一种方法是
已评估,其值为
返回如果测试产生错误
值,且未指定替代值,
那么表达式的结果是
未指定。
因此,如果表达式变为:
(if x y)
以下球拍功能产生错误:
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) ))
你的问题是针对球拍的。一般来
我试图找出方案中发生的有趣事情:
(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 '
好的,我上学期参加了这个计划,我知道你们不可能在一个学期内就这么擅长这个计划。一位朋友问我如何计算某个数字在一个数字中出现的次数。如果是一张单子,我知道该怎么办。起初我认为这是一个简单的使用内置商或余数,但并没有结束,它看起来像我。例如,如何计算数字中出现5的次数:(numfives 125458563)应返回3。感谢您的帮助
我不是在帮助他,我是为自己。我喜欢挑战 然后将一个数字转换为一个列表,然后找出一个数字在一个数字中出现的次数。
用于将数字转换为列表,使用string->list将字符串
我正在学习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
我需要帮助在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
我的随机函数有问题。我在以下位置设置了一个功能:
(define random-abcd
(cond [(equal? (random 4) 0) 'A]
[(equal? (random 4) 1) 'B]
[(equal? (random 4) 2) 'C]
[else 'D]
))
然而,当我运行此选项时,它比其他任何选项都要频繁。似乎代码中的[其他…]比其他选择发生得更多,这意味着它不是以相同的概率进行选择。有什么办
我试图用其位置替换方案列表中的元素。
例如,呼叫:
(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语言中,这些具有少量点的等效结构是什么
“((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,我一直收到这个错误消息。这是我的密码:
#lang racket
(define (1+) (+ 1 x))
我得到了错误“模块中的未绑定标识符”解决了它。。。我需要这个变量的名字
(define (1+ x) (+ 1 x))
我正试图编写一个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实践的一部分,我正在设计一个算术表达式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 页