标签: scheme

我如何从SICP调用Scheme号函数

在SICP中,(前2.6)将以下函数描述为"没有数字"的方法.我正在试图理解这一点.作为起点,如何调用这些函数?我可以用输出为1的某种方式实际应用它们吗?(或任何其他数字?)

(define zero (lambda (f) (lambda (x) x)))

(define (add-1 n)
  (lambda (f) (lambda (x) (f ((n f) x)))))
Run Code Online (Sandbox Code Playgroud)

我最初的尝试没有成功:

Welcome to DrScheme, version 4.1.5 [3m].
Language: Simply Scheme; memory limit: 128 megabytes.
> (add-1 (zero))
. . procedure zero: expects 1 argument, given 0
> (add-1 zero)
#<procedure>
> (add-1 1)
#<procedure>
> ((add-1 1))
. . #<procedure>: expects 1 argument, given 0
> 
Run Code Online (Sandbox Code Playgroud)

scheme sicp

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

从方案中的List中获取元素

如何通过方案中的列表中的列表或获取元素?

如何在列表中命名每个元素(就像我们对java中的变量所做的那样)?

提前致谢.

我想将列表中的每个点与另一个点进行比较.所以,正如我们在java或python-中所做的那样

for(int i;i<list.size();i++){
    if (list[i]> k){ 
        //do something
    }

}
Run Code Online (Sandbox Code Playgroud)

我怎么能在计划中做类似的事情?

scheme racket

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

关于定义语法的问题

我是编程新手,通过SICP工作,并喜欢它.虽然我对方案的定义语法有点困惑,主要是,有什么区别:

(define foo bar)
Run Code Online (Sandbox Code Playgroud)

和:

(define (foo) bar)
Run Code Online (Sandbox Code Playgroud)

第一个只是为foo分配bar并执行它吗?而第二个分配并等待通话?

如果是这样你怎么去调用另一个函数内的函数,比如在if语句中,

(if (foo) ...)
Run Code Online (Sandbox Code Playgroud)

要么

(if foo ...)
Run Code Online (Sandbox Code Playgroud)

scheme

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

如何在Scheme/LISP中编写all-but-one函数?

你们能想到全功能的最短和最惯用的解决方案吗?

;; all-but-one
;; checks if all but one element in a list holds a certain property
;; (all-but-one even? (list 1 2 4)) -> true
;; (all-but-one even? '(1)) -> true
;; (all-but-one even? '(2 4)) -> false
Run Code Online (Sandbox Code Playgroud)

编辑:完全是一个.

lisp scheme functional-programming

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

使用scheme得到3个值的中值

这次的问题是得到三个值的中位数(简单)

我这样做了:

(define (med x y z) (car(cdr(x y z)))
Run Code Online (Sandbox Code Playgroud)

它被接受但是在测试时:

(med 3 4 5)
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

错误:尝试调用非过程
(2 3 4)

输入字母而不是数字时,我得到:

(md x y z)
Run Code Online (Sandbox Code Playgroud)

错误:未定义杂物
Ý
(包用户)

使用xyz以外的东西我得到:

(md d l m)
Run Code Online (Sandbox Code Playgroud)

错误:未定义的变量
d
(包用户)

这个问题被删除了,不知道怎么回事

写一个返回3个值中值的函数

很抱歉编辑我得到的问题我应该先按顺序放置值,而不仅仅是一个窗台车和cdr的东西,所以我这样做了

33> (define (med x y z)
   (if(and(

      (<x y) (<y z) y

               if(and(

                    (<y x) (<x z) x z)))))

Warning: invalid expression
         (if (and< (<x y) (<y z) y if (and ((<y x) (<x z) x z))))
Run Code Online (Sandbox Code Playgroud)

但正如你所见,我得到一个警告所以什么是wronge?

scheme

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

Scheme中的标识符和绑定 - 如何解释函数?

我正在阅读DrRacket文件http://docs.racket-lang.org/guide/binding.html

有一个功能

  (define f
    (lambda (append)
      (define cons (append "ugly" "confusing"))
      (let ([append 'this-was])
        (list append cons))))
  > (f list)
  '(this-was ("ugly" "confusing"))
Run Code Online (Sandbox Code Playgroud)

我看到我们定义了函数f,我们在内部定义了带取(追加)的lambda,为什么?lambda的过程(主体)是另一个名为cons的函数,它附加两个字符串.

我根本不懂这个功能.谢谢 !

scheme racket

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

Scheme Pair的帮助

你怎么能从(5.2)到(5 2)?

scheme

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

使用R5RS方案在文件中写入换行符

我一直在寻找一种方法来在我必须使用R5RS的文件中写一个换行符,我在之前的一个问题(换行符端口)中看到过,但是这个版本在这个版本中不起作用,也没有\n,

有任何想法吗?

一切都写在一行(写"你好"p)(写"w"p)

给我一个hellop文件

scheme r5rs

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

通常认为R5RS的哪些部分不值得实施?

我一直在寻找好的小型Scheme实现.我注意到他们声称遵循"几乎所有"R5RS是非常平常的,但从来都不是全部.R5RS的哪些部分通常被认为太难/不值得?它们被认为是R5RS的错误吗?

scheme

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

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