Scheme 方案中的结构定义

Scheme 方案中的结构定义,scheme,racket,Scheme,Racket,如果两个学生年龄相同,我试图得到一个布尔值作为输出,但当我运行它时,它说它需要一个字符串作为第一个参数,但给定19。问题是什么?您创建的学生的年龄字段是整数,而不是字符串。请注意缺少双引号,然后尝试使用字符串=?函数来比较它们。您应该使用=函数来比较年龄: 或者创建年龄字段表示为字符串的学生: (define-struct student (first last major age)) (define student1 (make-student "David" "Smith" 'Math 1

如果两个学生年龄相同,我试图得到一个布尔值作为输出,但当我运行它时,它说它需要一个字符串作为第一个参数,但给定19。问题是什么?

您创建的学生的年龄字段是整数,而不是字符串。请注意缺少双引号,然后尝试使用字符串=?函数来比较它们。您应该使用=函数来比较年龄:

或者创建年龄字段表示为字符串的学生:

(define-struct student (first last major age))

(define student1 (make-student "David" "Smith" 'Math 19))
(define student2 (make-student "Joe" "Jones" 'Math 21))
(define student3 (make-student "Eli" "Black" 'Spanish 20))

(define (same-age? s1 s2)
  (= (student-age s1)
     (student-age s2)))

您创建的学生的年龄字段是整数,而不是字符串请注意缺少双引号,然后尝试使用字符串=?函数来比较它们。您应该使用=函数来比较年龄:

或者创建年龄字段表示为字符串的学生:

(define-struct student (first last major age))

(define student1 (make-student "David" "Smith" 'Math 19))
(define student2 (make-student "Joe" "Jones" 'Math 21))
(define student3 (make-student "Eli" "Black" 'Spanish 20))

(define (same-age? s1 s2)
  (= (student-age s1)
     (student-age s2)))

您的两个问题是相关的,您似乎正在努力比较不同的数据类型,以下是一些要点:

比较数字时,请使用= 比较字符时,使用char=? 比较符号时,请使用symbol=? 比较字符串时,请使用字符串=? 或者简单地使用equal?,即适用于多种类型的“全部捕获”过程,只要两个操作数的类型相同且相等,该过程就会返回true 例如,以下所有比较都将返回t:


您的两个问题是相关的,您似乎正在努力比较不同的数据类型,以下是一些要点:

比较数字时,请使用= 比较字符时,使用char=? 比较符号时,请使用symbol=? 比较字符串时,请使用字符串=? 或者简单地使用equal?,即适用于多种类型的“全部捕获”过程,只要两个操作数的类型相同且相等,该过程就会返回true 例如,以下所有比较都将返回t:

(define-struct student (first last major age))

(define student1 (make-student "David" "Smith" 'Math "19"))
(define student2 (make-student "Joe" "Jones" 'Math "21"))
(define student3 (make-student "Eli" "Black" 'Spanish "20"))

(define (same-age? s1 s2)
  (string=? (student-age s1)
            (student-age s2)))
(equal? 1 1)
(equal? 1.5 1.5)
(equal? #\a #\a)
(equal? 'x 'x)
(equal? "a" "a")
(equal? (list 1 2 3) (list 1 2 3))