1

我目前正在 BCPL 中为 OS 课程编程,并想在我is_digit()的程序中编写一个简单的验证函数。

我当前代码的代码片段如下:

let is_digit(n) be {
  if ((n >= '0') /\ (n <= '9')) then 
    resultis true;
}

我知道 BCPL 没有类型的概念,但是我怎么能用这种语言完成这种事情呢?

传入一个数字会产生一个false结果,而不是预期的true

4

2 回答 2

2

is_digit() 是一个返回值的函数,而不是例程,因此应该使用 = VALOF 而不是 BE。否则,代码是可以的。

let is_digit(n) = valof {
    .....
    resultis true
 }
于 2017-02-03T09:33:08.870 回答
0

返回值的函数应该使用valof而不是be,后者(例程而不是函数)可以作为函数调用,但是您从中获得的返回值将是 undefined (a)

此外,您应该确保为每个代码路径返回一个有效值。目前,非数字不会执行RESULTIS语句,我不完全确定在这种情况下会发生什么(所以最好是安全的)。

这意味着您所追求的就是这样的事情,请记住,可能存在实现变体,例如&and /\for and,或{...}and$(...$)用于块分隔符 - 我使用了 Martin 最新手册中记录的那些:

LET is_digit(n) = VALOF {
    RESULTIS (n >= '0') & (n <= '9')
}

(a)由于 Martin Richards 仍在使用 BCPL,因此本手册可能有助于解决未来的任何问题(或查看他的主页以获取大量好东西)。

于 2020-07-29T02:16:07.207 回答