Prolog - 省略范围[N-1,2]中的所有主号码
问题描述:
我试图编写一个功能 - noPrime(X,Result)
,它给出了范围为[X-1,2]
的所有非主号码的列表。Prolog - 省略范围[N-1,2]中的所有主号码
例如 -
noPrime(9,Result).
Result = [8,6,4]
到目前为止,我尝试了后续 -
nprimes(4,[]) :- !.
nprimes(X,[H|Rest]) :- H is X-1,nprimes(H,NewRest),
(isPrime(H) -> Rest = NewRest; Rest = [H|NewRest]).
但它给 -
Result = [8, 8, 7, 6, 6, 5, 4, 4].
好像它复制非主,并给出一个时间的主要。
isPrime - 这是我自己的功能,效果很好。
你能检测到这里有什么问题以及如何纠正它吗?
答
您总是在nprimes/2
的第二个参数的开头添加元素。 然后,如果元素是素数,那么第二个参数仍然会有元素;如果元素不是素数,它将被添加两次。
它应该阅读:
nprimes(X,Rest) :- H is X-1,nprimes(H,NewRest),
(isPrime(H) -> Rest = NewRest; Rest = [H|NewRest]).
为 “非主号码” 的术语是*合数*) – Haile
相关:http://stackoverflow.com/questions/8311046/what-is-the -bottleneck功能于这个-素数相关的谓词 – false