【发布时间】:2015-06-30 21:44:05
【问题描述】:
我正在尝试用 Scheme 语言编写 GPA 计算器。我认为我遇到问题的唯一部分是我需要在列表中将字母转换为整数的部分。我在下面的代码中使用 eq? 是因为在他的一个示例中,我们的教授使用了 eq?将字母转换为整数。
(define creditSum
(lambda (lst)
(if (or (not (list? lst)) (empty? lst))
0
(+ (car lst) (creditSum (cdr lst))))))
(define (gpa lst x)
(cond
((eq? x "A") 4.0)
((eq? x "B") 3.0)
((eq? x "C") 2.0)
((eq? x "D") 1.0)
((eq? x "F") 0.0)
(/ (creditSum x) (length x))))
我想为每个字母分配一个数字,并使用这些字母将我的输出作为整数或小数。例如,如果我输入:(gpa '(A B A B)),我的输出应该是 3.5。
【问题讨论】:
-
"eq?"可能不是用于字符串的正确比较。
(eq? "a" "a")不一定是真的。相反,您需要使用equal?。 -
eq?不将字母转换为整数。情商?是一种等价关系,您可以在the documentation 中了解更多信息。您的教授可能犯了一个错误,或者您可能误解了您的教授,但是 eq?不将字母转换为整数。
-
在
(eq? x "D")中,您正在比较一个字符串和一个变量x的值。当您编写'(A B A B)时,您有一个符号列表(不是字符串!),因此x的值将是一个符号。没有符号会等于字符串。 -
那么有没有内置函数可以用来将符号转换为整数?
标签: list scheme calculator higher-order-functions