我在Scheme中连接和空格有问题.命令的结果:
(append '(%procedure:) (list '+) '(%))** //with spaces
Run Code Online (Sandbox Code Playgroud)
是:
%procedure: + % //without spaces
Run Code Online (Sandbox Code Playgroud)
如何在列表之间没有空格的情况下生成相同的结果,结果将是:
%procedure:+%
Run Code Online (Sandbox Code Playgroud) 我有以下代码及其评论作为评论:
(require scheme/mpair)
(list) ;; '()
(mlist) ;; '()
(cons 'un (list)) ;; '(un)
(list 'un (list)) ;; '(un ())
(mcons 'un (mlist)) ;; (mcons 'un '())
(mlist 'un (mlist)) ;; (mcons 'un (mcons '() '()))
Run Code Online (Sandbox Code Playgroud)
我的问题:
为什么第3个表达式不返回'(),而不是'(un . ())?
为什么不将第5个表达式和第6个表达式返回相同的东西?
我试图truncate在方案中使用该函数,DrRacket继续发出此消息
ProblemA.rkt:27:46: truncate: this function is not defined in: truncate
Run Code Online (Sandbox Code Playgroud)
是否有导入或我可以添加的内容,以便编译器可以找到该库truncate?
基本上我想做整数除法的方案,以便98/10 = 9代替9.8,但truncate功能不工作.
第二版" 如何设计程序"中的练习42 解释了DrRacket突出显示了cond下面代码中的最后两个子句,因为测试用例并未涵盖所有可能的情况.
; TrafficLight -> TrafficLight
; given state s, determine the next state of the traffic light
(check-expect (traffic-light-next "red") "green")
(define (traffic-light-next s)
(cond
[(string=? "red" s) "green"]
[(string=? "green" s) "yellow"]
[(string=? "yellow" s) "red"]))
Run Code Online (Sandbox Code Playgroud)
我的理解是else最后的一个条款应该涵盖其余的案例,所以我尝试替换最后的表达式:
(define (traffic-light-next s)
(cond
[(string=? "red" s) "green"]
[(string=? "green" s) "yellow"]
[(string=? "yellow" s) "red"]
[else "green"]))
Run Code Online (Sandbox Code Playgroud)
这并不能解决突出问题.这里发生了什么?
如何创建宏以使S:N或[S:N]返回以S开头并以N结尾的数字范围(步骤1).基本上,它应该能够用它来代替"范围内".我尝试创建类似于Curly bracket {}的东西来替换Racket中的'begin'但不能.
编辑:我尝试按照@soegaard的建议:
我-top.rkt:
#lang racket
(define-syntax-rule (my-top S:N)
(range S N) )
(provide (rename-out [my-top #%top]))
Run Code Online (Sandbox Code Playgroud)
test.rkt:
#lang racket
(require "my-top.rkt")
(1:42)
Run Code Online (Sandbox Code Playgroud)
但它没有运行.错误是:
#%top: use does not match pattern: (#%top S:N) in: (#%top . 1:42)
Run Code Online (Sandbox Code Playgroud)
[1:42]和1:42也行不通.
如何获得每个子列表的产品?尝试:
(apply map * '((1 2) (3 4)))
Run Code Online (Sandbox Code Playgroud)
但它返回:'(3 8),而它应该返回'(2 12)
我正在尝试生成从0到1的随机数,包括Racket中的0和1边框.直到现在我还没有找到解决方案.有一个很好的方式吗?
我刚刚设置了iracket.但有些功能似乎不起作用.
(define (f z) (first (rest z)))
(f '(1 2 3))
first: undefined;
cannot reference an identifier before its definition
in module: top-level
internal name: first
context...:
Run Code Online (Sandbox Code Playgroud)
我想知道iracket中有第一个和休息功能吗?
有没有办法比较它们?例如,这不起作用:
(equal? (flat-contract integer?) (flat-contract integer?))
Run Code Online (Sandbox Code Playgroud) 编程语言:Scheme / DrRacket
我发现foldr和之间的用法没有区别apply
谁能解释他们的不同之处?据我所知,使用文件夹可以实现与应用相同的功能。谢谢!