2016-02-27 21 views
1

下面是簽名合金:使用「in」和得到錯誤「在只能在同一元數的2個表達之間使用」

one sig Library { 
    books: set Book,         
    patrons: set Patron,        
    circulation: Patron lone -> some Book 
} 

sig Book { } 

sig Patron { 
    curbooks: set Book 
} 

問題 - >我想要做的是:寫一個事實,即目前有靠山的書都佔在圖書館的流通關係現在

fact curPatronBooksConsistent { 
     lone l : Library | all b : l.patrons.curbooks | b in l.circulation 
} 

我明白錯誤的性質:在只能使用同一個元素的2個表達式之間。

Left type = this/Book 
Right type = this/Patron->this/Book 

但是我不知道該怎麼也可以找到只返回一個的與該library.circulation相關書籍「設置」中的任何實例。我意識到這不是一個集合,而是一種關係,所以我如何在Alloy中表達這種關係?

都屬於食客例如書籍所有p.curbooks都映射在l.circulation中?

謝謝大家提前。

回答

1

歡迎堆棧溢出。你說

However I do not know how to nor can I find any examples of returning only a "set" of books that are associated with the library.circulation.

再看看dot(join)操作符的討論;你應該找到很多例子。關係circulation是一個三元關係圖書館 - >守護神 - >圖書。表達式l.circulation執行加入並降低了元數,產生關係贊助人 - >簿。

你如何得到表單贊助人的關係 - >預訂一套書?

一個顯而易見的方法是將其與像Patron.(l.circulation)表達加入一組贊助的。這可能不是你想要的 - 你可能想說的是,每個書中顯示的一些贊助人的curbooks不僅僅是一些贊助人,而是那個特別的贊助人。

相關問題