我確實想通過以下方式(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 中撰寫它?
uj5u.com熱心網友回復:
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)
這個怎么運作:
- 我們使用一個輔助函式
go。 - 基本情況是
x(rstart), 大于rend。在這種情況下,我們回傳 False。 - 否則,我們檢查
number除以的余數x是否為零。如果是這樣,我們回傳 True 并且不再進一步遞回。 - 否則我們增加
x并go再次呼叫。
使用any我們可以將上面的改寫如下:
dividesRange2 :: Integer -> Integer -> Integer -> Bool
dividesRange2 number rstart rend = any (\x -> number `rem` x == 0) [rstart..rend]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/355725.html
上一篇:Haskell函式實作
下一篇:如何為雙半組制作容器?
