2014-02-05 35 views

回答

1

序言是一种逻辑语言,而不是一个必要的。您可能需要以不同的方式阐明问题。通过制定你想要的而不是你想要的。

  1. 这是一个递归版本:

    the list of numbers between A and B is empty if A >= B or else 
    the list of numbers between A ans B is A and the list of numbers between A+1 and B 
    
  2. 这是一些prologs功能的版本。

    find all numbers X between A and B 
    

这两个版本都可以很直接转入序言。没有'循环',因为prolog不是关于命令(做这个!做那个!把那个值放在那里!增加!),而是关于制定问题。

1

我不知道你的渲染的意思,但你可以通过递归轻松地创建一批名单,因为序言没有循环:

range_list(M,M,[M]). 
range_list(M,N,[M|R]) :- 
    M < N , 
    M1 is M+1 , 
    range_list(M1,N,R) 
    . 
range_list(M,N,[M|R]) :- 
    M > N , 
    M1 is M-1 , 
    range_list(M1,N,R) 
    . 

您也可以使用内置在断言得到你想要的东西:

range_list(From,To,Result) :- 
    findall(X,between(From,To,X),Result) 
    .