Methods “使用”是一种不好的做法吗&引用;在球拍方法名称中?

Methods “使用”是一种不好的做法吗&引用;在球拍方法名称中?,methods,functional-programming,scheme,racket,naming,Methods,Functional Programming,Scheme,Racket,Naming,上周我参加了一次紧张的考试,我用问号符号(如“归属”、“发烧”等)命名了一些考试方法。但当他们给我结果时,我的一位教授告诉我,在我使用的方法中使用“?”是一种不好的做法,我没有得到它,因为很多方法在racket中最初被称为那样 所以我的问题是:这真的是一种糟糕的做法吗?如果这是一种不好的做法,为什么racket会使用它?根据racket代码库自己的谓词,布尔值函数应该以?结尾属于?并且发烧?似乎符合这一要求,所以我怀疑这取决于你们教授的品味。谓词过程以结尾在计划和喧闹中都是惯用的。由于历史和惯例

上周我参加了一次紧张的考试,我用问号符号(如“归属”、“发烧”等)命名了一些考试方法。但当他们给我结果时,我的一位教授告诉我,在我使用的方法中使用“?”是一种不好的做法,我没有得到它,因为很多方法在racket中最初被称为那样


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

根据racket代码库自己的谓词,布尔值函数应该以
结尾
属于?
并且
发烧?
似乎符合这一要求,所以我怀疑这取决于你们教授的品味。

谓词过程以
结尾在计划和喧闹中都是惯用的。由于历史和惯例与此类程序相关,因此存在某些期望,因此偏离该惯例被视为不好的做法。Scheme标准甚至有将这种做法形式化的语言():

按照约定,谓词的名称是始终返回 当名称包含任何字母时,布尔值以“?”结尾; 否则,谓词的名称不会以问号结尾

现在,在Scheme和Racket中,谓词都是始终返回布尔值的过程,即
#t
#f
。如果受到批评的过程并不总是返回
#t
#f
,那么它们就不符合谓词命名约定的模型。如果不是这样的话,在看不到实际定义的情况下,很难知道它们是如何做得不够的

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


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

在不提供理由的情况下声明某个内容是一种不好的做法实际上不是一个有效的参数。问你的教授为什么这是一种不好的做法。你能解释一下你的方法吗?正如ad Abrudum提到的,它们可能不是谓词。你是对的,我没有提到返回值是什么。我只在方法返回布尔值时使用“?”,即#t或#f。谢谢你的观察。