如何检查列表是否具有连续权限

时间:2016-09-22 06:22:00

标签: ocaml

我是ruby的新手并且正在处理一个问题,但我不知道如何解决这个问题。 我想编写一个函数,如果每个连续元素是前一个元素的幂,则返回true,否则返回false

例如:如果我有一个列表[2; 4; 8; 16],该函数应该返回true 函数应该返回false,[3; 7; 9;]

let consec_ele element = match element with
[] -> true
h::t -> 
if h > t then false
else
  if t/h = 0 && t mod h = 0 then true
;;

我只是无法弄清楚如何使其工作,并如此递归。

1 个答案:

答案 0 :(得分:2)

嗯,首先需要将问题正式化:

  • 如果我的列表为空,则为^
  • 如果我的列表不是,那么它以数字^开头
    • 如果true,那么我需要重新开始,因为n
    • if n = 1然后我在列表的其余部分a^0 = 1 for all a上调用一个新函数n > 0,其行为如下:
      • 如果check为空,则为真
      • 其他tltl开头,如果是tl,那么我会以其他方式递归n',我需要保留我现在正在检查的事实{ {1}} ...
    • 如果n' = n * ncheck

在OCaml中,这将是

n * n * n

(对于n <= 0函数,我让你写它;-)当然,这可能是坏的,因为你可能有溢出,也许你更愿意看看是否falselet consec_ele l = let rec cer b = function | [] -> true | n :: tl -> if n <= 0 then false (* We can start again for the first 1 we see, but if our * list is [1; 1; 1; ...; 1] then we need to stop * That's why we have this boolean b which is true and once * we see 1 as the head of our list we swap it to false *) else if n = 1 then b && cer false tl else let rec check p = function | [] -> true | n' :: tl -> n' = pow n p && check (p + 1) tl in check 1 tl in cer true l;; 的pth根(为什么我们在stackoverflow上没有LaTeX数学模式?: - ())