gpt4 book ai didi

scheme - Racket 中的语法错误是否相等?

转载 作者:太空宇宙 更新时间:2023-11-03 19:01:40 24 4
gpt4 key购买 nike

我正在尝试将列表输入传递给对话,并让函数检查另一个列表(关键字)中的第一个元素是否与用户传入的列表的第一个元素匹配。如果两者匹配,则输出一个零否则递归地将输入列表的尾部传递回自身。

(define keyword '(am I))

(define (conversation input)
(cond
((equal? (car keyword) (car input)) 0)
(else (conversation (cdr input)))))

我得到的错误是:

car: contract violation
expected: pair?
given: '()

我理解为相等?比较两个元素,一对,但我不明白的是为什么当两个列表的汽车都恰好是一个元素时它会产生错误。任何帮助将不胜感激,我假设解决方案相当简单,但我似乎看不到它。

我的目标是创建多个函数来进行模式匹配并输出适当的对话框,但不使用正则表达式或其他库。没有强制要求不使用上面提到的两个,但我想在没有它们的情况下这样做,以便更好地理解逻辑和代码。感谢您的帮助!

最佳答案

首先要考虑的是你没有失败的条件。您假设 现在car 匹配,或者稍后与 cdr 匹配。但是可能根本没有匹配项,您将 cdr 向下移动列表,直到您的列表是 '()。由于不存在 '()car 这样的东西,因此当您尝试提取它时会遇到错误。因此,首先要做的是确保你已经处理了这个案例。我不知道你打算在这种情况下做什么,所以我让程序返回 #f

接下来考虑如果符号匹配怎么办。在您的情况下,您选择返回 0。这部分似乎没有问题。

最后,我们考虑如果 car 不匹配怎么办。在这种情况下,我们继续搜索输入。这部分似乎没有问题。

(define (conversation input)
(cond ((null? input) #f)
((eq? (car input) (car keyword))
0)
(else
(conversation (cdr input)))))

关于scheme - Racket 中的语法错误是否相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43699317/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com