方案列表对于随机访问来说很慢,这是许多应用程序(例如图像处理)中的常见操作.这是否会使这种应用自然受到妨碍?
我正在通过SICP工作并参与了关于平方根代码的部分.我理解'if'语句只能跟随单个表达式.但是,在代码中,
(define (sqrt-iter guess x)
(if (good-enough? guess x)
guess
(sqrt-iter (improve guess x)
x)))
Run Code Online (Sandbox Code Playgroud)
当'guess'和'x'已经被陈述为'if'的结果表达式时,我不明白第3,第4和第5行是如何有效的.
我想知道,如果
(cons (quote (a b c)) #f)
Run Code Online (Sandbox Code Playgroud)
给出一个输出
(( a b c ))
Run Code Online (Sandbox Code Playgroud)
那么这给了什么输出:
(cons (quote (a b c)) #t)
Run Code Online (Sandbox Code Playgroud)
?
谢谢
方案/球拍中的功能是什么,可用于检查实数是否在给定的数字范围内。
这个函数显示正确的东西,但是如何让这个函数的输出成为另一个函数呢?
;;generate an Caesar Cipher single word encoders
;;INPUT:a number "n"
;;OUTPUT:a function, whose input=a word, output=encoded word
(define encode-n
(lambda (n);;"n" is the distance, eg. n=3: a->d,b->e,...z->c
(lambda (w);;"w" is the word to be encoded
(if (not (equal? (car w) '()))
(display (vtc (modulo (+ (ctv (car w)) n) 26)) ))
(if (not (equal? (cdr w) '()))
((encode-n n)(cdr w)) )
)))
Run Code Online (Sandbox Code Playgroud) 我正在制作一个简单的代码,使用递归来打印列表的元素:
(define (printList list)
(if (empty? list)
'()
(begin
(display (car list))
(printList (cdr list)))))
Run Code Online (Sandbox Code Playgroud)
它确实有效,但我想知道是否有一种不打印空列表的方法.当我用(printList'(1 2 3 4))运行我的程序时,我得到了:
1 2 3 4()
有办法解决这个问题吗?
谢谢
我无法弄清楚为什么我的lambda错了.它应该创建一个make-exp.
(define (exp b n)
(if (n = 0)
1
(* b (exp b (- n 1)))))
(define make-exp (lambda(n) (lambda(b)(exp b n ))))
(define square (make-exp 2))
(square 3)
Run Code Online (Sandbox Code Playgroud)
错误:2不是函数[square,exp,(anon)]
我目前正在Scheme中为一个作业编写一个小项目.我没有长时间使用Scheme,所以我对语法不够强.
问题是在if句中使用"和".我有一个日历中的约会列表,但我只想要在一定时间间隔之间的约会.因此,我需要检查开始和结束时间.
我希望实现的内容在C#中看起来像这样:
List<appointment> appointments = new List<appointment>();
foreach (appointment app in calendar) {
if(app.getstart() >= from-time && app.getend() <= to-time) {
appoinments.add(app);
}
}
Run Code Online (Sandbox Code Playgroud)
我目前在Scheme中拥有的是:
(define (time-calendar cal from-time to-time)
(map (lambda (app)(if (> from-time (send 'getstart app)) #t #f))
(send 'getappointments cal)))
Run Code Online (Sandbox Code Playgroud)
采用日历"cal"和时间间隔(从时间到时间)然后我从cal获得约会(app)并迭代它们.对于每个人,我检查时间是否大于"app"的开始时间.相应地返回true或false.这很有效,但我仍然需要考虑约会是否也在"准时"之前结束.这应该是添加另一个条件的简单问题,但我根本无法使其工作.
任何人都可以帮助我检查第二个变量的正确语法吗?我知道关于Racket文档,但我仍然无法解决我的问题.
我尝试更换cond的if句子.
我也尝试了一些"and"部分的变体,与此类似,但无法正确使用语法:
(define (time-calendar cal from-time to-time)
(map (lambda (app)(if (and((> from-time (send 'getstart app))) (< to-time (send 'getend app))) #t #f))
(send 'getappointments cal)))
Run Code Online (Sandbox Code Playgroud) 我对Racket有疑问.
(我正在使用http://docs.racket-lang.org/guide/conditionals.html上的教程)
我试着编写一个执行此操作的函数:如果x小于4,则应该增加1,否则应该乘以2.
(define (number x)
(if (< x 4) 'x+1 'x*2))
Run Code Online (Sandbox Code Playgroud)
所以我在DrRacket上编译它,但它没有做任何事情.该(if (< x 5) 'x+1 'x*2))-Part被标记为黑色!我认为问题就在'于此.
我使用Racket以相同的长度乘以列表.到目前为止,我尝试过:
(define (multiply-list a b)
(if ([(empty? a) (empty)])
else (cons(*car(a)car(b)))
cdr(a) cdr(b)))
Run Code Online (Sandbox Code Playgroud)
我无法理解Racket的语法.我想更新列表cdr.但我不能把它弄清楚a并且b是清单.