gpt4 book ai didi

methods - 在 Racket 方法名称中使用 "?"是一种不好的做法吗?

转载 作者:行者123 更新时间:2023-12-04 02:27:37 25 4
gpt4 key购买 nike

上周我参加了一次 Racket 考试,我用问号符号命名了一些考试方法(例如“属于?”、“发烧了吗?”等)。但是当他们给我结果时,我的一位教授告诉我,使用“?”是一种不好的做法。在我使用它的方法中,我不明白,因为 Racket 中的很多方法最初都是这样调用的。

所以我的问题是:这真的是一种不好的做法吗?如果这是一种不好的做法,为什么 Racket 会使用它?

最佳答案

在 Scheme 和 Racket 中,predicate 过程以 ? 结尾是惯用的。由于与此类程序相关的历史和惯例存在某些期望,因此偏离该惯例被认为是不好的做法。 Scheme 标准甚至用语言形式化了这种做法 (R6RS 6.7 Naming Conventions):

By convention, the names of predicates—procedures that always return aboolean value—end in “?” when the name contains any letters;otherwise, the predicate's name does not end with a question mark.

现在,在 Scheme 和 Racket 中,predicate 是一个总是返回 bool 值的过程,即 #t#f。如果被批评的程序并不总是返回 #t#f,那么它们就不适合谓词的命名约定模型。如果情况并非如此,那么在没有看到实际定义的情况下很难知道它们是如何出现不足的。

member是一个可以用作“谓词”的 Racket 过程的示例,但实际上不是约定俗成的谓词,也不是规范的语言。如果查找的值不是列表的成员,此过程返回 #f,但如果它是列表的成员,则返回以查找的值开头的列表的尾部(此列表尾部是一个真值,但不是 bool 值 #t)。请注意,member 不以问号结尾。如果 OP belongs? 的行为类似于 member,那么教授将此命名归类为不良做法当然是正确的。

请注意,其他 lisp 对谓词有不同的约定。例如,在 Common Lisp 中,在谓词名称中使用 ?传统的(并且不被认为是一种好的做法)。

关于methods - 在 Racket 方法名称中使用 "?"是一种不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66427205/

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