2012-10-04 35 views
1

我無法獲取列表中的第一個float元素。我到目前爲止(完全沒用,說不定)來完成:序言:從列表中獲取第一個浮點數

get_float(_, F) :- float(F). 

get_float([ First | Rest ], F) :- 
    get_float(Rest, F). 

給了我這樣的:

some_pred(P) :- 
    get_float(SomeList, FloatNumber), 
    writeln(FloatNumber). % --> prints a stack position 

回答

1

試試這個

get_float([], _). 

get_float([ First | Rest ], F) :- 
    (float(First), F = First); 
    get_float(Rest, F). 
1

的邏輯應該是:

  1. 如果第一項是一個浮點數,那是你的傢伙。
  2. 如果第一項不是浮點數,則從列表的其餘部分獲取第一個浮點數。

看起來你正在試圖在你的第二個謂詞中做#2。你的第一個謂詞看起來是試圖做#1,但不是測試看到F是列表的第一個元素。

3

問題是你的第一個案件根本不檢查列表。試試這個:

get_float([F|_], F) :- float(F). 

否則你是在正確的軌道上。