在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) 如何通过方案中的列表中的列表或获取元素?
如何在列表中命名每个元素(就像我们对java中的变量所做的那样)?
提前致谢.
我想将列表中的每个点与另一个点进行比较.所以,正如我们在java或python-中所做的那样
for(int i;i<list.size();i++){
if (list[i]> k){
//do something
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么能在计划中做类似的事情?
我是编程新手,通过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) 你们能想到全功能的最短和最惯用的解决方案吗?
;; 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)
编辑:完全是一个.
这次的问题是得到三个值的中位数(简单)
我这样做了:
(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?
我正在阅读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的函数,它附加两个字符串.
我根本不懂这个功能.谢谢 !
我一直在寻找一种方法来在我必须使用R5RS的文件中写一个换行符,我在之前的一个问题(换行符端口)中看到过,但是这个版本在这个版本中不起作用,也没有\n,
有任何想法吗?
一切都写在一行(写"你好"p)(写"w"p)
给我一个hellop文件
我一直在寻找好的小型Scheme实现.我注意到他们声称遵循"几乎所有"R5RS是非常平常的,但从来都不是全部.R5RS的哪些部分通常被认为太难/不值得?它们被认为是R5RS的错误吗?
inexact->exactSICP中描述的Scheme程序如何运作?