Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 计划中的列表_List_Scheme - Fatal编程技术网

List 计划中的列表

List 计划中的列表,list,scheme,List,Scheme,我正在尝试在scheme中编写一个函数,它获取一个列表并对列表中的每个项目进行平方运算,然后以(list x y z)的形式返回列表。然而,我不知道如何编写一个代码来实现这一点。到目前为止,我已经 (define (square=list list) (cond [(empty? list) false] [else (list (sqr (first a-list))(square-list (rest a-list)))])) 但它以以下形式返回列表 (cons x (

我正在尝试在scheme中编写一个函数,它获取一个列表并对列表中的每个项目进行平方运算,然后以
(list x y z)
的形式返回列表。然而,我不知道如何编写一个代码来实现这一点。到目前为止,我已经

(define (square=list list)
  (cond
    [(empty? list) false]
    [else (list (sqr (first a-list))(square-list (rest a-list)))]))
但它以以下形式返回列表

(cons x (cons y (cons z empty)))

如何使其以
(list x y z)
的形式返回列表?谢谢

问题是您在else语句中使用了list。您的意思是创建一个列表,该值作为第一个条目,列表作为第二个条目。 您希望将第一个条目保存到递归调用创建的列表中

(list 'a '(b c d))
; gives you
'(a (b c d))

(cons 'a '(b c d))
; gives you
'(a b c d)

问题是您在else语句中使用了list。您的意思是创建一个列表,该值作为第一个条目,列表作为第二个条目。 您希望将第一个条目保存到递归调用创建的列表中

(list 'a '(b c d))
; gives you
'(a (b c d))

(cons 'a '(b c d))
; gives you
'(a b c d)
你就快到了——确保你理解了
cons
list
之间的区别(教科书第13节对此进行了解释。你可以在网上找到)

cons
将项目作为其第一个元素,并(通常)为“其余”部分提供一个(可能为空)列表。例如,
(cons 1 empty)
将数字1作为其第一个元素,
empty
列表作为“rest”
(cons 1(cons 2 empty))
将数字1作为第一个元素,将
(cons 2 empty)
作为“剩余”

list
只是制作列表的一种简单快捷方式,可以包含任意数量的项目。因此:

(列表12345)

和…一样

”(12345)

这和

(cons 1(cons 2(cons 3)(cons 4(cons 5 empty)()))

但是要小心<代码>(列表1(列表2(列表3))与
(cons 1(cons 2(cons 3 empty))
不同。事实上,它是
(cons 1(cons 2(cons 3 empty)empty)empty)

如果您仍然感到困惑,请随时发表评论。

您就快到了——请确保您理解
缺点和
列表之间的区别(教科书在第13节对此进行了解释。您可以在网上找到副本)

cons
将项目作为其第一个元素,并(通常)为“其余”部分提供一个(可能为空)列表。例如,
(cons 1 empty)
将数字1作为其第一个元素,
empty
列表作为“rest”
(cons 1(cons 2 empty))
将数字1作为第一个元素,将
(cons 2 empty)
作为“剩余”

list
只是制作列表的一种简单快捷方式,可以包含任意数量的项目。因此:

(列表12345)

和…一样

”(12345)

这和

(cons 1(cons 2(cons 3)(cons 4(cons 5 empty)()))

但是要小心<代码>(列表1(列表2(列表3))
(cons 1(cons 2(cons 3 empty))
不同。事实上,它是
(cons 1(cons 2(cons 3 empty)empty)empty)


如果您仍然感到困惑,请随时发表评论。

这可能不是您的助教想要的,但我还是会把它放进去,因为它可能会帮助您了解更多的计划。编写您要做的事情的惯用方法是使用
map

> (map (lambda (x) (* x x)) '(1 2 3 66 102 10403))
(1 4 9 4356 10404 108222409)

map
将一个函数(此处为
(lambda(x)(*x))
-一个返回其输入平方的无名函数)应用于列表的每个元素,并返回一个包含所有结果的新列表。Scheme的
map
基本上与您在代码中所做的迭代相同,其优点是,通过使用
map
您永远不必显式地编写这样的迭代(并且,至少名义上,Scheme实现可能以某种特殊方式优化map,尽管在大多数情况下这并不重要)。map的重要之处在于,它将您的代码简化为重要的部分-此代码对列表中的每个元素进行平方运算,此其他代码取每个元素的平方根,此代码向其中添加一个元素,等等,而无需反复重复相同的基本循环迭代代码。

这可能不是您的TA想要的,但我还是要把它扔进去,因为它可能会帮助你们探索更多的计划。编写您要做的事情的惯用方法是使用
map

> (map (lambda (x) (* x x)) '(1 2 3 66 102 10403))
(1 4 9 4356 10404 108222409)

map
将一个函数(此处为
(lambda(x)(*x))
-一个返回其输入平方的无名函数)应用于列表的每个元素,并返回一个包含所有结果的新列表。Scheme的
map
基本上与您在代码中所做的迭代相同,其优点是,通过使用
map
您永远不必显式地编写这样的迭代(并且,至少名义上,Scheme实现可能以某种特殊方式优化map,尽管在大多数情况下这并不重要)。map的重要之处在于,它将您的代码简化为重要的部分—此代码对列表中的每个元素进行平方运算,此其他代码取每个元素的平方根,此代码向其中添加一个元素,等等,而无需反复重复相同的基本循环迭代代码。

(cons x(cons y(cons z empty)))
就是您想要的。你所拥有的是
(列表x(列表y(列表z)))
这和
(cons x(cons y(cons z empty)empty)empty)是一样的
-
cons
list
没有做同样的事情。哎呀,上面有一个我没有看到的错误…你实际拥有的是(列表x(列表y(列表z)),这和(列表x)是一样的(cons y(cons z empty)empty)empty。
(cons x(cons y(cons z empty))
是您想要的。您拥有的是
(list x(list y(list z)))
,与
(cons x(cons y))相同(