我目前正在 BCPL 中为 OS 课程编程,并想在我is_digit()
的程序中编写一个简单的验证函数。
我当前代码的代码片段如下:
let is_digit(n) be {
if ((n >= '0') /\ (n <= '9')) then
resultis true;
}
我知道 BCPL 没有类型的概念,但是我怎么能用这种语言完成这种事情呢?
传入一个数字会产生一个false
结果,而不是预期的true
。
我目前正在 BCPL 中为 OS 课程编程,并想在我is_digit()
的程序中编写一个简单的验证函数。
我当前代码的代码片段如下:
let is_digit(n) be {
if ((n >= '0') /\ (n <= '9')) then
resultis true;
}
我知道 BCPL 没有类型的概念,但是我怎么能用这种语言完成这种事情呢?
传入一个数字会产生一个false
结果,而不是预期的true
。
is_digit() 是一个返回值的函数,而不是例程,因此应该使用 = VALOF 而不是 BE。否则,代码是可以的。
let is_digit(n) = valof {
.....
resultis true
}
返回值的函数应该使用valof
而不是be
,后者(例程而不是函数)可以作为函数调用,但是您从中获得的返回值将是 undefined (a)。
此外,您应该确保为每个代码路径返回一个有效值。目前,非数字不会执行RESULTIS
语句,我不完全确定在这种情况下会发生什么(所以最好是安全的)。
这意味着您所追求的就是这样的事情,请记住,可能存在实现变体,例如&
and /\
for and
,或{...}
and$(...$)
用于块分隔符 - 我使用了 Martin 最新手册中记录的那些:
LET is_digit(n) = VALOF {
RESULTIS (n >= '0') & (n <= '9')
}
(a)由于 Martin Richards 仍在使用 BCPL,因此本手册可能有助于解决未来的任何问题(或查看他的主页以获取大量好东西)。