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