我已经尝试了各种各样的缺点组合并附加产生'(5.(5))但我不能.有什么办法吗?
所以我一直在学习Scheme for school,并且遇到了使用car和cdr对我来说没有意义的系列.
所以给出一个清单: (define x '(1 2 3 4 5))
为什么(caddddr x)在(cddddr x)返回(5)和(car (cddddr x))返回时向我吐出错误5.
不(caddddr x)一样(car (cddddr x))吗?
(define (list-without-last-pair items)
(let ((s (cdr items)))
(if (null? s)
null
(cons (car items)
(list-without-last-pair s)))))
(define (only-last-pair items)
(let ((s (cdr items)))
(if (null? s)
(car items)
(only-last-pair s))))
(define (reverse items)
(if (null? items)
null
(cons (only-last-pair items)
(reverse (list-without-last-pair items)))))
Run Code Online (Sandbox Code Playgroud)
我的main方法和辅助方法中有很多代码重复.如何避免这种情况并改进解决方案?
预期输出:(reverse (list 1 2 3))=>(3 2 1)
在Scheme中,如果我想要一个列表,请说(1 2 3),我会写'(1 2 3).通常情况下,这很好,但它实际上相当于(quote (1 2 3)),与之不完全相同(list 1 2 3).这会产生不同结果的一个例子:
'(1 2 (+ 0 3)) -> (1 2 (+ 0 3))
(list 1 2 (+ 0 3)) -> (1 2 3)
Run Code Online (Sandbox Code Playgroud)
第二行是否有语法糖?对于矢量有.例如:
#(1 2 (+ 0 3)) -> #(1 2 3)
(vector 1 2 (+ 0 3)) -> #(1 2 3)
Run Code Online (Sandbox Code Playgroud)
如果列表中没有这样的糖,那将是非常具有讽刺意味的,因为列表的使用方式比Scheme中的向量更常用!
我正在寻找一种仅使用文件夹映射两个不同列表项的方法
(map-Using-FoldR '( 1 2 3 4) '( w x y z))
Run Code Online (Sandbox Code Playgroud)
应该回来
'((1 w) (2 x) (3 y) (4 z))
Run Code Online (Sandbox Code Playgroud)
或者换句话说-使用foldr实现“ map”命令是可能的吗?谢谢!
我在我的项目中使用femtolisp,但它不支持do循环.任何人都可以指导我如何在femtolisp中添加do循环功能,或者我可以在常见的lisp中为do循环定义一个宏.
我知道该方案是一个词法范围/静态范围的语言,但我不明白为什么这两个代码块返回不同的结果.
(define a 100)
(let ((z 20))
(lambda (a b) (+ a b)) a z)
Run Code Online (Sandbox Code Playgroud)
20
(define a 100)
(let ((z 20))
(lambda (a b) (+ a b)) z a)
Run Code Online (Sandbox Code Playgroud)
100
我正在试图理解制造计数器程序的方案代码.这是一个更高阶的程序(程序输出另一个程序),我坚持下去.
(define make-counter
(lambda (n)
(lambda ()
(set! n (+ n 1))
n)))
(define ca (make-counter 0))
(ca)
(ca)
Run Code Online (Sandbox Code Playgroud)
它按预期分别输出1和2.为什么我们需要2个嵌套程序?它们的功能分别是什么?
如果有人详细解释,我将不胜感激.谢谢你们.
我们怎样才能用方案语言中的字符串获取变量值,因为我们可以在Common Lisp中实现这一点:
> (defvar s 3)
> S
> (symbol-value (intern "S"))
> 3
Run Code Online (Sandbox Code Playgroud)
我从闭包中访问父函数的参数.
编辑:我找到了这个解决方案,但我不能使用eval,因为它在顶层评估.寻找替代品.
(eval (string->symbol "s"))
Run Code Online (Sandbox Code Playgroud)
编辑2:我发现Common lisp代码也试图在全局空间中找到符号.所以这个问题基本上都适用于Lisps(Common Lisp,Scheme).
任何人都可以向我解释这个Scheme中的表达式如何返回100?
(((lambda (f) ((lambda (g) (lambda (h) (f (g (h 4))))) double)) square) inc)
Run Code Online (Sandbox Code Playgroud)
我知道它以某种方式分解为"(2*(4 + 1))^ 2",但对于我的生活,我无法弄清楚如何.
这是针对类似问题的考试.其中大约有6或7个,我们必须在大约1或2分钟内找到答案(因为它们只是测试的一部分).除了努力学习之外,我们的教授没有提供任何帮助,但我完全不知道如何做到这些,更不用说快速了.
任何帮助将不胜感激!谢谢.