BCPL的isdigit函数

时间:2017-01-19 04:33:26

标签: operating-system bcpl

我目前正在使用BCPL编写OS课程编程,并希望在我的程序中编写一个简单的is_digit()函数进行验证。

我当前代码的代码段:

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

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

传入数字会产生错误的结果,而不是预期的true

由于

2 个答案:

答案 0 :(得分:2)

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

let is_digit(n) = valof {
    .....
    resultis true
 }

答案 1 :(得分:0)

返回值的函数应该使用valof而不是be,后者(一个例程而不是一个函数)可以作为一个函数被调用,但是返回值您将从它那里得到的返回值是不确定的(a)

此外,您应确保为每个代码路径返回一个有效值。此刻,非数字将不会执行RESULTIS语句,并且我不确定是否会完全 发生这种情况(最好是确保安全)。

这意味着您所追求的是这种情况,请记住可能会有实现变体,例如&/\的{​​{1}}和and{...}作为块定界符-我使用了Martin最新手册中记录的那些:

$(...$)

(a)由于Martin Richards仍在与BCPL合作,this manual可能会在以后的任何问题中有所帮助(或查看他的home page以获取大量赠品)