【发布时间】:2018-04-12 21:33:13
【问题描述】:
我正在读这本书: http://www.shido.info/lisp/scheme3_e.html
我坚持做这个练习:
(car '((1 2 3) (4 5 6)))
问题是,根据我的理解,我必须了解我们如何得到 ((1 2 3) (4 5 6)) 得到 (car '((1 2 3) (4 5 6))) 因为 car 计算第一个地址。
我尝试了几次,但无法得到确切的“字符串”(我什至不知道如何调用它们):
(cons (cons 1 (cons 2 (cons 3 '()))) (cons 4 (cons 5 (cons 6 '()))))
给我
{{1 2 3} 4 5 6}
(cons (cons (cons 1 (cons 2 (cons 3 '()))) '()) (cons 4 (cons 5 (cons 6 '()))))
给我
{{{1 2 3}} 4 5 6}
(cons (cons (cons 1 (cons 2 (cons 3 '()))) '()) (cons (cons 4 (cons 5 (cons 6 '()))) '()))
给我
{{{1 2 3}} {4 5 6}}
至少我得到了两个部分的括号......
问题是,如果我每次调用car来获取第一个地址,我都需要在脑海中制定结果才能看到山的另一边,这似乎是一个非常对我来说很难语言...所以我希望我错了。
【问题讨论】:
-
这似乎不是一本很好的书(例如,“地址”是一个您从未听说过与 Scheme 相关的词)。优秀的书籍Structure and Interpretation of Computer Programs 和How to Design Programs 可以在线获取,它们都是你能找到的最好的编程书籍。
-
@molbdnilo 谢谢,我实际上正准备在此之后阅读 sicp。听说 sicp 没有教太多的语法,所以我拿了一本语法书。不过可能是错的。
-
Lisp 家族的语法非常简单;如果不涵盖所有内容,就不可能写一本书。我建议您从 HtDP 开始(它有点“友好”)或直接转到 SICP。它们都更容易阅读(它们是由母语是英语的专家编写的),包含的错误少得多,并且都包含许多有意义的练习。
-
@molbdnilo 啊,谢谢!将读取 SICP。
标签: scheme