我要瘋了以下問題的參數SPARQL查詢:我不能調用來自內部的Prolog謂詞
我有一個謂語makeQuery/3是建立一個參數SPARQL查詢詢問DBpedia中,這之一:
makeQuery(Place, Query, Row) :- %% e.g. Place = '"Rome"'
atomic_list_concat([ 'select COUNT(*) where {?place a dbpedia-owl:Place ;',
' rdfs:label ', Place, '@it.}'], Query),
sparql_query(Query, Row, [ host('dbpedia.org'), path('/sparql/')]).
正如你可以看到它在Prolog的外殼很好地工作,其實我可以通過它特定的廣場參數,然後檢查,如果這是使用DBpedia的一個地方,這是輸出我的Prolog外殼:
[debug] ?- makeQuery('"Roma"', Query, Row).
Query = 'select COUNT(*) where {?place a dbpedia-owl:Place ; rdfs:label "Roma"@it.}',
Row = row(literal(type('http://www.w3.org/2001/XMLSchema#integer', '1'))).
正如你所看到的參數都以這種方式被傳遞:「‘羅馬’」,我認爲,這意味着,羅馬是原子
(或者是理解錯了?)好的,這個工作很好,我的結果(行)發現一個事件,所以,對我來說,羅姆人是一個地方!
現在我發現一個大問題:這個makeQuery/3謂詞必須被其他謂詞使用,而不是在Prolog shell中使用,我不能將它用於其他謂詞。
我已創建以下執行/ 2謂詞嘗試使用它:
execute([FirstToken|Tail], TokenValue, OccurrencesPlaces) :-
write(FirstToken),
arg(2, FirstToken, TokenValue),
atom_codes(Atom, TokenValue),
makeQuery(Atom, Query, OccurrencesPlaces),
write(OccurrencesPlaces).
該斷言取令牌的列表(我的令牌是一樣的東西:T(1,[ 82,111,109,97])具有一個噸:算符,一個標識符漸進數和令牌的內容是ASCII的rappresenting一個字符串,是一個字)
列表例如先前的令牌具有1作爲識別符和它的內容rappresent字符串羅馬(即一個地方,以便查詢將發現的發生)
好了,所以這個謂詞放在TokenValue可變串並執行以前makeQuery/2謂詞將其傳遞給我的TokenValue值(上例中的字符串羅馬)
現在在序言殼我做的:
[debug] ?- SystemTokenized = [t(1, [82, 111, 109, 97])].
SystemTokenized = [t(1, [82, 111, 109, 97])].
,現在我叫執行/ 3謂詞傳遞給它SystemTokenized:
[debug] ?- execute($SystemTokenized, TokenValue, OccurrencePlaces).
t(1,[82,111,109,97])
false.
正如你看到的,似乎沒有很好地工作,因爲我傳遞字符串羅馬到查詢作爲參數,但我認爲有一些問題,因爲它不是一個原子或類似的東西......
我想從幾個小時來解決,但我不能找到一個解決方案
所以我的問題是:如何才能從另一個調用謂詞取參數像以前的執行/ 3謂詞例?
'atom_codes(A,「Roma」),atomic_list_concat([''',A,'''',Result).' –