(define-struct student (first last major))
(define student1 (make-student "John" "Smith" 'CS))
(define student2 (make-student"Jane" "Jones" 'Math))
(define student3 (make-student "Jim" "Black" 'CS))
#;(define (same-major? s1 s2)
(symbol=? (student-major s1)
(student-major s2)))
当我输入这些内容时,我得到了我期望的答案。
;;(same-major? student1 student2) -> FALSE
;;(same-mejor? student1 student3) -> True
但是当我想知道学生是否有相同的名字时,它告诉我他们希望一个符号作为第一个参数,但是给了约翰。
(define (same-first? s1 s2)
(symbol=? (student-first s1)
(student-first s2)))
我做错了什么?
答案 0 :(得分:4)
'CS
和'Math
是符号,“John”,“Jane”和“Jim”不是(它们是字符串)。正如错误消息告诉您的那样,symbol=?
的参数需要是符号。
要比较字符串的相等性,您可以使用string=?
或equal?
(使用字符串,符号以及其他所有内容)。
答案 1 :(得分:1)
改变这个:
(symbol=? (student-major s1)
(student-major s2)))
对此:
(string=? (student-major s1)
(student-major s2)))
请注意,您要比较字符串而非符号,因此必须使用相应的相等程序。