我想看一个函数运行多长时间.在PLT-Scheme中最简单的方法是什么?理想情况下,我希望能够做到这样的事情:
> (define (loopy times)
(if (zero? times)
0
(loopy (sub1 times))))
> (loopy 5000000)
0 ;(after about a second)
> (timed (loopy 5000000))
Took: 0.93 seconds
0
>
Run Code Online (Sandbox Code Playgroud)
这不要紧,如果我不得不使用一些其他类似语法(timed loopy 5000000)
或者(timed '(loopy 5000000))
,或者如果它返回一个缺点或东西所花费的时间.
如何更改用cons
向量制作的列表?
((p b p b p b p b)
(b p b p b p b p)
(p b p b p b p b)
(b p b p b p b p)
(p b p b p b p b)
(b p b p b p b p)
(p b p b p b p b)
(b p b p b p b p))
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
(define b "black") (define w "white") (define (board) (letrec ((ti (lambda (x) …
我想知道是否可以在Racket中编写一个可以转换每种形状的宏(c(a | d)+ r xs),其中c(a | d)+ r是匹配car,cdr,caar的正则表达式,干部,......等,先进入相应的组成和休息.
例如,这个宏应该采用(caadr'(1 2 3 4 5))并将其转换为(first(first(rest'(1 2 3 4 5)))).
沉(Mark Tarver的新编程语言)中有类似的东西:https://groups.google.com/group/qilang/browse_thread/thread/131eda1cf60d9094?hl = en
我目前正在玩LISP.一切都很好,但我无法理解以下问题.
我有这个追加操作:
(define (append l1 l2)
(if (eq? l1 null)
l2
(cons (first l1)
(myappend (rest l1) l2))))
Run Code Online (Sandbox Code Playgroud)
我这样使用它:
(myappend (cons (cons 1 2) null) '(4 5))
Run Code Online (Sandbox Code Playgroud)
而Racket的结果 是:
'((1 . 2) 4 5)
Run Code Online (Sandbox Code Playgroud)
但为什么?在我的观点中,它应该是'(1 2 4 5),因为cons返回一个列表,myappends附加两个列表.有谁能够帮我?LISP在做什么?
我正在使用DrRacket作为方案编译器.当我尝试使用fold-right函数时,我得到了"fold-right:模块中的未绑定标识符:fold-right".在调用此函数之前是否需要包含一些库?
谢谢!
这是SICP中的一个示例,我输入它但是有错误.
(define (sum term a next b)
(if (> a b)
0
(+ (term a)
(sum term (next a) next b))))
Run Code Online (Sandbox Code Playgroud)
这是错误:
函数调用:期望一个函数在打开括号后,但找到一个变量
我写了一些代码,但它没有用,因为add1
我在Scheme中使用的函数不适用于R5RS.什么可以取代add1
R5RS?
我有一个表达式:例如(map some-proc some-list)
,评估为'(#f #f #f)
.
我想检查此列表中的所有布尔值是否都为真.然而,
(and '(#f #f #f))
回归'(#f #f #f)
,而我留意#f
.
现在,如果我(apply and '(#f #f #f))
,我得到错误:
and: bad syntax in: and
在DrRacket环境中.这很令人困惑,因为Racket Reference提供的示例(apply + '(1 2 3))
似乎与我的问题完全相同.
我做错了什么以及如何让我#f
离开'(#f #f #f)
?
我正在使用Racket和Dr. Racket进行教育.
在变量"x"和"y"的以下定义之后:
(define x (list 1 2 3))
(define y (list 4 5 6))
Run Code Online (Sandbox Code Playgroud)
我决定使用这些变量创建3个不同的列表.
第一:
(append x y)
>> '(1 2 3 4 5 6)
Run Code Online (Sandbox Code Playgroud)
第二:
(cons x y)
>> '((1 2 3) 4 5 6)
Run Code Online (Sandbox Code Playgroud)
第三:
(list x y)
>> ((1 2 3) (4 5 6))
Run Code Online (Sandbox Code Playgroud)
之后,我决定在三个列表中使用布尔运算符"and"和"or".令我感到惊讶的是输出.为什么会这样?为什么"或"和"和"选择其中一个列表?这个决定背后的比例是多少?
(and (append x y) (cons x y) (list x y))
>> '((1 2 3) (4 5 6))
(or (append x y) (cons x y) (list x y))
>> '(1 2 …
Run Code Online (Sandbox Code Playgroud) 好的,我是scheme/racket/lisp的新手.我在练创造我自己的功能,语法和递归,所以我想我自己foldl
和foldr
功能是做什么的预定义的版本做.我不能这样做,因为我只是不明白这些功能是如何工作的.我在这里看到过类似的问题,但我仍然没有得到它.细分的一些例子会有所帮助!这是我的(不正确的)过程:
(foldl - 0 '(1 2 3 4))
我这样做0 -(4-3-2-1)
,得到2,这是正确的答案
(foldl - 0 '(4 3 2 1))
我做到了0-(1-2-3-4)
8但应该是-2.
(foldr - 0 '(1 2 3 4))
我这样做0-(1-2-3-4)
又得到了8,但它应该是-2.
(foldr - 0 '(4 3 2 1))
我这样做0-(4-3-2-1)
,得到2,这是正确的答案.
我究竟做错了什么?