如何读入和比较scheme中的字符串?

如何读入和比较scheme中的字符串?,scheme,Scheme,这显然还没有完成,但我正在尝试从用户那里获取输入并搜索列表中的数字或字符串。 如果我只使用数字,它可以正常工作,但如果我使用字符串,它将失败。 我怎样才能做到这一点 多谢各位 我的代码无法使用 Enter student name or ID : damien . . string=?: contract violation expected: string? given: damien argument position: 1st other arguments...:

这显然还没有完成,但我正在尝试从用户那里获取输入并搜索列表中的数字或字符串。 如果我只使用数字,它可以正常工作,但如果我使用字符串,它将失败。 我怎样才能做到这一点

多谢各位

我的代码无法使用

Enter student name or ID : damien
. . string=?: contract violation
  expected: string?
  given: damien
  argument position: 1st
  other arguments...:
   damien
导致问题的部分有一个卡雷特指向它

(define (student l s)
  (cond 
    ((and (number? s) (= (car (car l)) s))
     (newline)
     (display "ID=")(display (car (car l)))
     (display ", Name=")(display (car (cdr (car l))))
     (display ", Grade=")(display (car (cdr (cdr (car l)))))
     (newline)
     )
   ->((string=? (car (cdr (car l))) s)
     (newline)
     (display "ID=")(display (car (car l)))
     (display ", Name=")(display (car (cdr (car l))))
     (display ", Grade=")(display (car (cdr (cdr (car l)))))
     (newline)
     )
    ((null? l) (display "Student not found")(newline))
    )
  )
(define (display-student l) 
  (display "Enter student name or ID : ")
  (student l (read))
  )

read
读取列表结构和所有内容,就像scheme的源代码一样。因此,
read
将读取包含双引号的字符串。没有它,它会认为它是一个
符号
。也许
读取行
更适合一般字符串输入?

就像您对
条件
的第一个子句(即调用
编号?
)所做的那样,您需要对第二个子句执行相同的操作:

(字符串=?…)
替换为

(and (string? (car (cdr (car l))))
     (string? s)
     (string=? (car (cdr (car l))) s))

这样做之后,可能会发生其他错误,但您可以继续。例如,如果用户只键入一个名称(不带引号),则
read
函数将返回一个
符号?
。但是,如果用户键入两个名称,如“Ron Paul”,作为first+last,那么您将得到意外的结果。

我需要它匹配特定的格式,但您解决了我的问题。符号=?很好。你说的具体格式是什么意思<代码>读取行读取字符串,如“Hello World”,但当然不带引号<代码>显示将不带引号地显示它,但要获得与符号相同的效果,用户需要在将其作为符号读取时输入| Hello World |。工程安装。符号中不允许所有字符。