小编soe*_*ard的帖子

在Scheme中获取vector中的第一个元素

假设我在Scheme中创建了一个向量/数组:

(let* ((x #(1 2 3)))
  (list-ref x 0)) ; returns error 
Run Code Online (Sandbox Code Playgroud)

我可以在list-ref的位置使用什么语法或函数1

编辑:我正在使用Script-Fu和GIMP 2.8,array-ref这似乎不起作用.

arrays scheme vector

3
推荐指数
1
解决办法
1890
查看次数

如果是else子句或cond在Racket中

我想在拍,打印1,如果值写一个简单的程序a> 1,版画0,如果价值a = 0-1如果a < 0.我写了以下但看起来它没有照顾第三个条件.实际上,我没有包括第三个条件所以我不知道如何使用'if'子句检查所有三个条件.赞赏一点指导.

我是Racket的新手.我的计划是:

#lang racket
(define a 3);


(if (> a 0)
    0 
    1)
-1
Run Code Online (Sandbox Code Playgroud)

提前致谢.

racket

2
推荐指数
1
解决办法
9586
查看次数

使用let重写表达式

我一直在教方案语言,在我的教科书中,我按下了以下表达式。我的问题是为什么要对数字“ 10”进行评估?有人可以向我解释吗?意思是创建什么本地环境以及创建到符号的绑定。我也知道每个lambda表达式都可以使用重写let。任何想法如何做到这一点?我将不胜感激任何帮助。

(let ((x 10)) 
  (define y (lambda (x) x)) 
  (define x 5) 
  (+ x (y x)))
Run Code Online (Sandbox Code Playgroud)

lambda scheme let racket

2
推荐指数
1
解决办法
91
查看次数

这两个Scheme函数有什么区别?

  1. (define self-add
    (let ((x 0))
      (lambda ()
        (set! x (+ x 1))
        x)))
    
    Run Code Online (Sandbox Code Playgroud)

(自我添加)=> 1

(自我添加)=> 2

(自我添加)=> 3

(自我添加)=> 4

    2.
 (define self-add1
    (lambda ()
      (let ((x 0))
        (set! x (+ x 1))
        x)))
Run Code Online (Sandbox Code Playgroud)

(self-add1)=> 1

(self-add1)=> 1

(self-add1)=> 1

请告诉我如何理解上述两个功能之间的区别?非常感谢提前!最好的祝福.

scheme the-little-schemer

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

计划中的匿名宏

我最近正在学习计划并且对一个没有标识符就无法评估宏的设计感到好奇,而lambda(程序)可以这样做.

例如,我可以使用匿名lambda:

((lambda x x) 1 2 3)
Run Code Online (Sandbox Code Playgroud)

似乎我必须使用以下语法定义宏:

(define-macro my-macro (lambda x x))
Run Code Online (Sandbox Code Playgroud)

我很好奇为什么这样的方法会像这样直接创建一个宏:

(define my-macro (macro-lambda x x))
Run Code Online (Sandbox Code Playgroud)

我想如果将宏和lambda视为不同的类型,第二个可能更优雅.

我的问题是:

  1. 怎么define-macro办?
  2. 宏和lambda之间的根本区别是什么?
  3. 方案中是否有匿名宏,如果没有,为什么?

lisp compiler-construction macros scheme functional-programming

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