所以這一週,我安裝了Logtalk,這是Prolog的擴展之一。在這種情況下,我正在使用Prolog SWI,並且遇到了一些問題。我不確定如何使用Logtalk實際諮詢我自己的項目。爲了理解代碼本身,我已經看了Logtalk自帶的例子,這樣我就可以加載並完美地執行它們。我不明白的是當logtalk加載文件時實際發生的事情,以及我如何加載自己的項目。Prolog SWI:Logtalk,如何加載我自己的項目文件?
我會以「hello_world」爲例討論問題。名爲hello_world的文件位於Logtalk文件的示例文件夾中。但它被諮詢,像這樣:
| ?- logtalk_load(hello_world(loader)).
第一件事,我認爲是「這是一個函子」,看着使用跟蹤它在做什麼,我發現,它被從庫打來電話,被告知如何進入examples文件夾,然後打開「hello_world」文件夾,然後打開「loader」文件。之後正常編譯發生。
我看了看圖書館,無法弄清楚發生了什麼。我也認爲這不可能是在Logtalk中加載用戶創建的項目的實際路線。還有一篇文章是在問如何與SWI做到這一點,但沒有任何答覆,也沒有看到任何努力來解決這個問題。
現在讓我明確一些事情,我可以使用「諮詢('...')」。命令就好了,我甚至可以使用「consult」打開我的項目,但是如果我這樣做的話,logtalk控制檯似乎沒有使用任何logtalk擴展,所以只是香草序言。我已經使用Windows的安裝程序來安裝logtalk,我知道它正在工作,因爲我一直在看它附帶的示例。
我試圖找到一個教程,但它是很難找到任何東西的Logtalk,我發現最多的是上載該文件從您的項目中:
logtalk_load/1.
logtalk_load/2.
我理解像這樣:
logtalk_load(file). % Top level loading
logtalk_load(folder(file). % Bottom level loading
所以每次都保存一個巨大的人工負載我想有一個加載程序文件將加載我的項目的其他組件(這是什麼Logtalk的例子一樣)。這一點對我來說很有意義,我想,我如何到達我的加載程序文件,沒有。
我是否正確地理解了它,還有待觀察,但即使我已經正確理解了它,但我仍然對如何加載自己的項目感到迷茫。感謝您提供的任何幫助,如果您能舉出一個最好的例子,我很快就會從例子中學習。
LITTLE UPDATE
你問我是不是使用logtalk控制檯我的程序運行,而我,我使用的是提供並在「QUICK_START」文件[開始>程序中提到的一個> Logtalk>「Logtalk - Prolog-SWI(console)」]我想仔細檢查logtalk add是否正在工作並測試了「鳥」示例,因爲它使用了對象,並且是一個很好的熟悉示例。再次,使用logtalk_load/2仿函數時,一切正常。
考慮到目前給出的反饋,我看看庫路徑指的是多一點。研究logtalk如何加載文件。按照目前的設置,在不改變事情的情況下,logtalk會查詢包含名爲libpaths的序言文件的文件夾。它基本上是如何找到這些示例的,它只是從哪裏獲取文件的部分描述。所以當我說「logtalk_load/2」時,至少我可以告訴這個文件並找到我要求的文件夾。
現在,因爲我已經在examples文件夾中放置了自己的項目文件夾,所以我立即將自己的文件夾添加到列表中以測試這是否至少可以成爲部分解決方案,以幫助我更好地理解事情。我將以下內容添加到libpaths.pl文件中。
logtalk_library_path(my_project, examples('my_project/')).
% The path must end in a/so I have done so
所以,我有我的文件夾路徑宣佈,得到了我的文件夾,並加載程序文件是什麼,當我用裝載機我會打電話。在不考慮設置自己的lib路徑文件夾的情況下,我應該有足夠的工作量來做一些實際的學習。但很可惜沒有,看來我的調查沒有,我返回了以下內容:
ERROR: Unhandled exception: existence_error(library,project_aim)
不是我想看到的,我回來了這個庫錯誤的業務。我缺少對我的項目文件夾的引用,但我不知道它可能需要引用。對此事的運行跟蹤並沒有幫助我根本就出現下列情況:
Call: (17) logtalk_library_path(my_project, _G943) ? creep
Fail: (17) logtalk_library_path(my_project, _G943) ? creep
ERROR: Unhandled exception: existence_error(library,my_project)
的調用失敗,我只是沒有找到在那裏以往任何時候都logtalk正在尋找一個參考。對於這類問題,我是最好的新手,我現在只用3年的時間使用電腦,而使用c#和C++的視覺工作室使用過去的2年編程。至少我已經更多地瞭解了這個問題,在給出這些信息的情況下,還有更多有用的建議嗎?
謝謝,我現在正在運行。我還有一個問題:正如Daniel已經指出的那樣,settings.lgt中還有一行表示文件夾聲明。 logtalk_library_path(項目,'$ HOME/projects /')。假設我想創建一個項目文件夾,$ HOME部分是一個未聲明的變量,如果我要爲此聲明一個路徑,是否必須聲明完整路徑或是否有合適的方式來使用logtalk的默認路徑就像你說的那樣,我已經知道什麼時候安裝了?只是好奇,會很方便知道。 –
在Windows上,使用例如SWI-Prolog或GNU Prolog作爲後端Prolog編譯器時,已經定義了一個名爲'home'的庫(其他一些Prolog編譯器未能正確地擴展環境變量)。因此,您可以定義其他庫,其中'home'爲root,就像您引用的'logtalk_library_path(projects,'$ HOME/projects /')'示例。您也可以將'%HOME%'定義爲Windows環境變量。 –
你也可以使用'logtalk_library_path(projects,home('projects /'))'。 –