标签: scheme

方案:如何制作'(5.(5))

我已经尝试了各种各样的缺点组合并附加产生'(5.(5))但我不能.有什么办法吗?

scheme append cons racket

0
推荐指数
1
解决办法
75
查看次数

计划中的汽车和Cdr

所以我一直在学习Scheme for school,并且遇到了使用carcdr对我来说没有意义的系列.

所以给出一个清单: (define x '(1 2 3 4 5))

为什么(caddddr x)(cddddr x)返回(5)(car (cddddr x))返回时向我吐出错误5.

(caddddr x)一样(car (cddddr x))吗?

scheme list

0
推荐指数
1
解决办法
629
查看次数

如何在Scheme中反转列表?

(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)

algorithm scheme

0
推荐指数
1
解决办法
3119
查看次数

在Scheme中,是否有一个普通的,不带引号列表的语法糖?

在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中的向量更常用!

lisp scheme syntactic-sugar

0
推荐指数
1
解决办法
82
查看次数

如何使用右折叠在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”命令是可能的吗?谢谢!

scheme racket

0
推荐指数
1
解决办法
170
查看次数

在femtolisp中添加Do循环或定义do循环宏常见的lisp

我在我的项目中使用femtolisp,但它不支持do循环.任何人都可以指导我如何在femtolisp中添加do循环功能,或者我可以在常见的lisp中为do循环定义一个宏.

lisp scheme femtolisp

0
推荐指数
1
解决办法
116
查看次数

计划范围(Lisp)

我知道该方案是一个词法范围/静态范围的语言,但我不明白为什么这两个代码块返回不同的结果.

   (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

lisp scheme scope lexical

0
推荐指数
1
解决办法
463
查看次数

为什么make-counter过程包含两个lambda定义?

我正在试图理解制造计数器程序的方案代码.这是一个更高阶的程序(程序输出另一个程序),我坚持下去.

(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个嵌套程序?它们的功能分别是什么?

如果有人详细解释,我将不胜感激.谢谢你们.

lisp scheme counter closures

0
推荐指数
1
解决办法
79
查看次数

使用scheme中的字符串获取变量值

我们怎样才能用方案语言中的字符串获取变量值,因为我们可以在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).

lisp scheme common-lisp

0
推荐指数
1
解决办法
343
查看次数

Scheme中的多个Lambda嵌套?

任何人都可以向我解释这个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分钟内找到答案(因为它们只是测试的一部分).除了努力学习之外,我们的教授没有提供任何帮助,但我完全不知道如何做到这些,更不用说快速了.

任何帮助将不胜感激!谢谢.

lambda scheme nested

0
推荐指数
1
解决办法
106
查看次数