不使用模运算符F#计算余数

UmA*_*jid 3 f# c#-to-f#

我已经实现了我的代码,它基本上是在不使用模数运算符的情况下计算两个数字的余数但是,我陷入了一种只是忙乱的情况.我知道逻辑,但我是f#的新手,不知道如何实现它.

let rec modulus a b =
if b = 0 Console.WriteLine("Sorry Wrong Divisor")
let bool neg = a < 0
a = abs a
b = abs b
modulus(val-divisor,divisor)
Run Code Online (Sandbox Code Playgroud)

我所知道的是,我在这里遇到一个非常基本的错误,任何帮助,

Tom*_*cek 9

实现这一目标的第一步是修复缩进并将草图转换为实际编译和运行的有效F#代码 - 这应该有助于您进入下一步,即修复实现的逻辑.

与您的实际运行类似的最小代码如下所示:

let rec modulus value divisor : int =
  printfn "value=%d, divisor=%d" value divisor
  if divisor = 0 then Console.WriteLine("Sorry Wrong Divisor")
  let neg = value < 0
  let value = abs value
  let divisor = abs divisor
  modulus (value-divisor) divisor

modulus 10 5
Run Code Online (Sandbox Code Playgroud)
  • 我修复了缩进 - F#是缩进敏感的,所以这很重要.
  • 我替换了你a = abs alet- let关键字定义了一个新的变量,隐藏了现有的变量(因为你不能改变现有的变量 - 它们在F#中是不可变的)
  • 我将您的变量重命名为一致使用divisorvalue名称
  • 我添加了printfn以便您可以看到该函数如何运行(它将进入无限循环,因为它当前从不检查终止条件!)
  • 我必须添加类型注释: int来说明结果将是int- 因为你的函数永远不会返回,这是必需的(但你可以删除它一旦你修复它)