2014-02-05 34 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) 
    .