gpt4 book ai didi

scheme - 如何捕获Scheme中 `string-search-forward`的返回值?

转载 作者:行者123 更新时间:2023-12-02 09:40:10 24 4
gpt4 key购买 nike

我想编写一个过程(函数)来检查一个字符串是否包含另一个字符串。我从http://sicp.ai.mit.edu/Fall-2004/manuals/scheme-7.5.5/doc/scheme_7.html阅读了字符串库的文档

根据他们的说法,

Pattern must be a string. Searches string for the rightmost occurrence of the substring pattern. If successful, the index to the right of the last character of the matched substring is returned; otherwise, #f is returned.

这对我来说似乎很奇怪,因为返回值要么是整数,要么是 bool 值,那么我应该将返回值与什么进行比较?

我试过了

(define (case-one str)
(if (= #f (string-search-forward "me" str))
#t
#f))

DrScheme 不喜欢它,

expand: unbound identifier in module in: string-search-forward

谢谢

最佳答案

string-search-forward不是标准化的计划程序;它是 MIT-Scheme 实现所特有的扩展(这就是为什么您的链接会转到“MIT Scheme 引用手册”。)要查看那些有保证的过程,请查看 R5RS document .

在方案中,#f唯一值,表示“假”,条件表达式中使用的任何其他值都表示“真”。因此,将其与任何事物进行“比较”是没有意义的。在类似 string-search-forward 的情况下返回混合类型,您通常捕获变量中的返回值来测试它,如果它是非 false 则使用它:

(let ((result (string-search-forward "me" str)))  (if result      (munge result) ; Execute when S-S-F is successful (result is the index.)      (error "hurf") ; Execute when S-S-F fails (result has the value #f.)))

更高级的策略是使用cond=>子句在某种意义上是上述内容的简写:

(cond ((string-search-forward "me" str) => munge)      (else (error "hurf")))

这样的形式(<test> => <expression>)意味着如果 <test>是真值,则 <expression>被评估,这必须是一个单参数过程;使用值 <test> 调用此过程作为一个论点。

关于scheme - 如何捕获Scheme中 `string-search-forward`的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5761322/

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