2017-01-18 61 views
0

我有一個關於我的任務的問題。 任務:序言自由日代碼

人們已將天分配給他們。在這些日子裏,他們可以自由工作。

卡爾是免費的鉬,週三,週四

盧卡斯是免費的星期二,星期三,星期四,星期五

喬恩是免費的鉬,星期三,薩

亞歷克斯星期四,Fr,Sa免費

Max is is免費鉬,星期三,星期五,星期六,星期日

我創建了這些假設的知識庫:

free(Karl,Mo). 

free(Karl,Wed). 

free(Karl,Thu). 

.. 

.. 

free(Max,Su). 

4個問題是問:

  1. 是人X免費日ÿ

  2. 什麼時候有哪些人員在一起。

  3. 哪些人是空閒的2/3/4天連續。

  4. 誰是免費的連續3天。

問題1很簡單。

?- free(X,Day). 

無法弄清楚最後3

感謝您的幫助。

+1

在2-4上,您需要編寫一些代碼:描述符合條件的邏輯的謂詞。你有什麼嘗試?此外,你現在的問題顯示你的事實。在Prolog中,變量以大寫字母或'_'開頭,原子以小寫字母開頭。 '免費(卡爾,莫)'有兩個變量。您可能需要用單引號('free('Karl','Mo')')或小寫,'free(karl,mo)')或混合使用('free('Karl',mo )')。 – lurker

+0

我還建議將你的日子風格從羅嗦原子改爲整數,這樣你就不必定義那個跟隨mo的例子。 –

回答

0

free(susi,1)。

free(susi,3)。

free(susi,4)。 (horst,2)。 (horst,3)。 (horst,4)。

free(horst,5)。 (lars,1)

free(lars,1)。 (lars,3)。 (lars,6)。

免費(hanna,4)。

free(hanna,5)。

free(hanna,6)。

free(fridolin,1)。

free(fridolin,3)。

free(fridolin,5)。

free(fridolin,6)。

free(fridolin,7)。

%free(X,Y)。 (X,Y,Z)的組合。 (Person1,Person2,When): - free(Person1,When),free(Person2,When),+(Person1 = Person2)。

好吧,我更新了知識庫並設法完成了第一個和第二個任務。

卡住了第三個現在:/

+0

對於第三個和第四個任務,最好的辦法是創建一個謂詞,其行爲如下: free_for_days(Person,Count),它發現一個人免費,然後調用free_from_day_for_days(Person,Day,Count),它確定他們是否在第二天是免費的,然後遞歸到free_from_day_for_days(Person,Day + 1,Count - 1) –

+0

考慮到您將需要使用NewCount是Count-1,因爲您無法在原地進行算術在prolog中。如果您使用我在僞代碼中提供的簽名,' - '將進行模式匹配 –

+0

您可能還想在日計數中使用0而不是7,以便在計算第二天時可以使用模數 –