如何读入和比较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 |。工程安装。符号中不允许所有字符。