我尝试了一个示例,我们需要将列表作为参数传递,如果条件成功,我想将结果添加到新列表中。
以下是代码:
(define get-description
(lambda (codeValue newList)
(cond
((= (car codeValue) 1) (cons "A" newlist))
((= (car codeValue) 2)(cons "B" newlist))
((= (car codeValue) 3) "C")
(else "Negative numbers are not valid"))))
我将其作为函数调用传递:
(get-description (list 1 2 3) (list))
我得到输出:
(cons "A" empty)
输出应该只显示:(A)
我正在使用DrRacket编写我的程序,并选择语言模式为:Beginning Student。
为什么我的cons
中的A
和""
获得了empty
和newlist
?
答案 0 :(得分:2)
请不要在Racket中使用“Beginning Student”作为语言类型。这是专门为HtDP书制作的子集。语言“racket”,“r5rs”,“相当大”,更像是真正的方案,应该都适用于The Little Schemer。
在你的参数列表中,你有(codeValue newList ),但在程序正文中你引用了 newlist 。我使用的所有方案都是区分大小写的。将您的newList
更改为newlist
会使您的计划在Chez Scheme和Guile上运行得非常好。
修改:为了澄清,"A"
是字符串。 Scheme还有 symbol 的附加数据类型,它只是一个名称而没有其他内容(可能就是你想要的)。如果您期望(cons 'A newlist)
,则可能需要(cons "A" newlist)
而不是(A)
。
答案 1 :(得分:-1)
其他方案只打印("A")
。这样的输出显然是Racket语言的特质。
至于为什么A
在引号中,那是因为它是一个字符串对象,而这就是字符串对象的打印方式。但是如果你要显示这样一个对象,你就会得到A
的寂寞。