【发布时间】:2018-04-12 22:29:13
【问题描述】:
我在 Scheme 中创建了一个名为 chatbot 的字符串列表。
聊天机器人中的每个列表元素都有字符串。我正在尝试使用不同的列表对这些字符串进行分类,这些列表都存储在一个名为 chatbot 的大列表中。 (抱歉冗余)
为了清楚起见,下面是执行此操作的代码:
(define greetings '("string 1"
"string 2"
"string 3"
"string 4"))
(define cheerUpPhrases '("string 5"
"string 6"))
(define congratsPhrases '("string 7"
"string 8))
(define didNotUnderstand '("string 8"
"string 9"
"string 10"))
(define chatbot '(greetings cheerUpPhrases congratsPhrases didNotUnderstand))
我真的认为这没问题。但后来,在一个函数中,我想得到“字符串 3”,所以我尝试这样做:
(caddar chatbot)
然后得到这个错误:
caddar: contract violation
expected: (cons/c (cons/c any/c (cons/c any/c pair?)) any/c)
given: '(greetings cheerUpPhrases congratsPhrases didNotUnderstand)
不太清楚这意味着什么,我将(caddar 聊天机器人)更改为:
(third (car chatbot))
最后,我得到了这个错误:
third: contract violation
expected: list?
given: 'greetings
现在,我知道(第三个)需要一个列表(实际上是一对)才能工作; car/cdr 和类似功能也是如此。毕竟我没有给它一个清单吗?我现在真的很困惑。
我只是从 Scheme 和函数范式开始,所以我可能会遗漏一些基本的东西。如果你能解释一下发生了什么,那真的会对我有所帮助。
提前致谢。
【问题讨论】:
标签: scheme racket quote type-mismatch cdr