gpt4 book ai didi

string - 多个字符串之间的方案检查

转载 作者:行者123 更新时间:2023-12-02 22:19:15 27 4
gpt4 key购买 nike

为了让自己更熟悉 scheme 接口(interface),我尝试在 Dr. Racket 中编写一个过程(虽然与 MIT Scheme 兼容),检查给定的各种不同字符串并根据什么返回适当的字符串提供。我到目前为止是这样的:

(define (conversation input)
(cond ((eq? (or "hello Racket" "hi Racket" "what's up, Racket?"
"hey Racket" "what's happening, Racket?") input) "hey coder")
(else "no hablo ingles.")))

*字符串之间的空间正好适合这里。这是解释器中的一个长语句。

期望的效果是,如果我输入:

(conversation "hello Racket")
(conversation "hi Racket")
(conversation "hey Racket")

它们都将返回相同的结果,即“嘿编码器”。然而,事实并非如此。唯一返回“hey coder”的是(对话“hello Racket”)。其余所有返回“no hable ingles”。与该语言的许多其他方面一样,我对 scheme 中的字符串不太了解。我相当确定问题出在 or 语句中,尽管我不知道在这种情况下可以使用的替代方法。我已经尝试查找解决方案,但我还没有遇到任何符合此类描述的内容。有谁知道可以使用的代码的任何替代方案?

最佳答案

or 接受一个参数列表并检查它的任何参数是否“真实”(即不是 #f)。如果是这样,它返回第一个为真的参数。如果不是,则返回 #f。所以 (or "string1""string2"...) 只是返回 "string1"。所以你所做的就是检查给定的字符串是否等于“hello Racket”并忽略其他选项(你可能会在这里反对它不适用于“hello Racket” - 我会得到那个)。您要做的是为 提供完整的条件,而不仅仅是字符串。所以它应该看起来像 (or (eq? "string1"input) (eq? "string2"input) ...)

但是这也不起作用。为什么不?因为 eq? 是用于比较字符串的错误函数。只有当两个字符串驻留在内存中的同一位置时,它才会返回 true。如果两个字符串驻留在不同的内存位置,但具有相同的内容,则返回 #f。这也是为什么您当前的代码为“hello Racket”返回 #f 的原因。您应该使用的是 equal?,它比较字符串的内容。

这现在应该可以工作了,但是有点笨拙 - 为每个可能的字符串重复调用 equal?。更好的方法是创建一个包含有效字符串的列表,然后使用 member 函数检查输入字符串是否包含在列表中。

关于string - 多个字符串之间的方案检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13993030/

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