我正在寻找关于Scheme类型的标准文档.例如,As类型不需要在程序中明确指定,我不知道它是bool或boolean; LIST或LISTE; int或Nat; List[]还是List[alpha]......
另一个小问题是如何定义"原子表达".例如,是'(1 2 3)一个原子表达式?
我正在分析代码,我看到了这一点
[(exp + exp) (+ $1 $3)]
Run Code Online (Sandbox Code Playgroud)
现在我想知道这是做什么的?是否需要该列表的第一个和第三个元素?那个设置在左侧甚至被认为是一个列表?我正在学习这门语言,但我已经度过了非常艰难的时光,所以你们一直都是最好的帮助.谢谢!
我想在scheme函数中声明一个空列表.为了实现这一点,我使用let.我知道let的结构
(let (name1 value1) (name2 value2)...)
Run Code Online (Sandbox Code Playgroud)
但是当我将它应用到我的函数中时
(let (new-list '()))
Run Code Online (Sandbox Code Playgroud)
我得到一个错误,上面写着"让:期望与变量和表达式绑定,但找到别的东西"我怎么能解决它,任何想法?
我正在尝试编写一个计划程序,这是Dijkstra的最短算法.在我放松边缘的过程中,我得到了错误
形成不良的特殊形式:(让(...)())
我的程序代码是,
(define relax-over-edge
(lambda (distlist edge min-pair)
( if (null? distlist)
()
(if (equal? (cadr edge) (caar distlist))
(if (> (cdar distlist) (+(cdr min-pair) (cddr edge)))
(let (((cdar distlist) (+ (cdr min-pair) (cddr edge)) )) ())
()
)
(relax-over-edge (cdr distlist) edge min-pair)
)
)
)
)
Run Code Online (Sandbox Code Playgroud)
非常感谢你.
是否可以取消引用列表中包含的变量,以获取其值?例如:
(define one 1)
(define two 2)
(define list '(one two))
(display (list-ref list 0))
Run Code Online (Sandbox Code Playgroud)
这里list-ref引用one并以字母display显示one.可以改为one取消引用同音变量包含的值吗?
如果pair以空格char结尾,为什么结果值包含一个点(.)?这个点(.)是什么意思?
(cons 1 2 )
;Value 2: (1 . 2)
(car (cons 1 2 ))
;Value: 1
(cdr (cons 1 2 ))
;Value: 2
Run Code Online (Sandbox Code Playgroud)
这一个看起来很愚蠢,因为对只包含两个元素.
我只是想知道为什么第一个表达式在结果中回显一个点!
(cadr (cons 1 2 ))
;The object 2, passed as an argument to safe-car, is not a pair.
;To continue, call RESTART with an option number:
; (RESTART 1) => Return to read-eval-print level 1.
Run Code Online (Sandbox Code Playgroud)
谢谢!
我正在阅读一本编程语言书,它要求我解释下面的Scheme函数的作用(不确定,有人可以帮忙解释):
(define (x lis)
(cond ((null? lis) 0)
((not (list? (car lis)))
(cond
((eq? (car lis) #f) (x (cdr lis)))
(else (+ 1 (x (cdr lis))))))
(else (+ (x (car lis)) (x (cdr lis))))))
Run Code Online (Sandbox Code Playgroud) 所以我只是在球拍中,正在考虑使用键与计算机进行交互,并且通过球拍将键解释为字符串.我正在寻找我的代码的优化,并想知道字符串或符号是否更快操作.
我正在使用BSL语言在HtDP,第4章中工作.
我正在处理的问题是:
练习136:如果你运行main,按空格键(开枪),等待很长时间,镜头从画布上消失.但是,当您关闭世界画布时,结果是一个仍包含此隐形镜头的世界.
设计一个替代的tock函数,它不仅可以每个时钟刻度移动一个像素,还可以消除那些坐标位于画布上方的像素.提示:您可能希望考虑为递归cond子句设计辅助函数.
我想出的解决方案如下(在剧透中).但是,我觉得我在做一些多余的事情.基本上我的辅助功能的应用不太正确.
(define (main w0)
(big-bang w0
(on-tick ticking)
(on-key fire-key)
(to-draw to-render)))
(define HEIGHT 100)
(define WIDTH 80)
(define TURRET-X-POS (/ WIDTH 2))
(define BKGRND (empty-scene WIDTH HEIGHT))
(define SHOT-IMG (triangle 4 "solid" "red"))
(define (to-render w0)
(cond
[(empty? w0) BKGRND]
[else (place-image SHOT-IMG TURRET-X-POS (first w0) (to-render (rest w0)))]))
(define (fire-key w0 ke)
(cond
[(key=? ke " ") (cons HEIGHT w0)]
[else w0]))
(define (ticking w0)
(cond
[(empty? w0) empty]
[(empty? (only-inbound-shots w0)) empty]
[else …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Chicken Scheme的 中止程序,如下面的代码所示:
(module change-calculator (export calculate-change)
(import scheme)
(define (calculate-change coin-values amount)
(cond ((null? coin-values) (abort '"coin-values should contain at least one value."))
((= 0 amount) '() )))
)
Run Code Online (Sandbox Code Playgroud)
但得到以下警告:
Warning: reference to possibly unbound identifier `abort' in:
Warning: calculate-change
Run Code Online (Sandbox Code Playgroud)
该文档未提及任何需要导入的附加模块.我尝试导入extras,utils,srfi-12没有任何成功.谁能告诉我使用中止程序的正确方法?还是我错过了别的什么?