【问题标题】:Find if a number is divisible in a range of numbers查找一个数字是否可以在一个数字范围内整除
【发布时间】:2021-12-23 06:31:17
【问题描述】:

我确实想通过以下方式(C 代码)将整数(rstart)与整数(数字)进行比较:

#include <stdio.h>
#include <stdlib.h>

int main (void){
    int rstart = 15, rend = 25, number = 629;
    while (rstart <= rend){
        rstart++;
        if (number % rstart == 0){
            return number % rstart;
        }
    }   
    return number % rstart;
}

现在我知道如何在 c 或 python 中编写类似的东西,但我不知道如何在 Haskell 中编写。

我确实从以下开始:

dividesRange :: Integer -> Integer -> Integer -> Bool
dividesRange number rstart rend = 

我不知道如何在 Haskell 中实现 C 中的 while 循环。我知道我可以使用所有 if 语句,但在我看来这是低效的。有没有一种简单的方法可以在 Haskell 中编写它?

【问题讨论】:

    标签: haskell recursion


    【解决方案1】:
    dividesRange :: Integer -> Integer -> Integer -> Bool
    dividesRange number rstart rend = go rstart where
      go x
        | x > rend = False
        | otherwise = number `rem` x == 0 || go (x+1)
    

    它是如何工作的:

    1. 我们使用辅助函数go
    2. 基本情况是x (rstart) 大于rend。在这种情况下,我们返回 False。
    3. 否则,我们检查number 除以x 的余数是否为零。如果是这样,我们返回 True 并且不再递归。
    4. 否则我们增加x并再次调用go

    使用any我们可以将上面的内容改写如下:

    dividesRange2 :: Integer -> Integer -> Integer -> Bool
    dividesRange2 number rstart rend = any (\x -> number `rem` x == 0) [rstart..rend]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多