我试图通过在LearnOcaml中运行这些代码来获取两位数的质数列表。如果我将listify方法的参数(从流返回的列表)限制为小于20,则会编译代码。否则,它永远不会停止或返回“ Exception:Js_of_ocaml__Js.Error _”。我认为代码在语义上没有错。所以我 想知道是否有人可以帮助解决问题?
awk '{print $1,$2,$3}'
答案 0 :(得分:0)
似乎filterStr
在尝试创建代表21号之后的下一个元素的StrCons
时正在循环。由于只有21个2位数的质数,因此它将永远循环。
请注意,当以n = 0调用listify
时,StrCons
已经被构造;只是没有被检查。但是这种情况下的StrCons
有所不同(OCaml是一种严格的语言)。
使用此版本的listify
,您可以使工作正常:
let rec listify s n =
if n = 0 then []
else
match s with
| Eos -> []
| StrCons (q, w) ->
if n = 1 then [q] else q :: listify (w ()) (n - 1)