簡體   English   中英

如何創建100%聲明式模型?

[英]How to create a 100% declarative model?

我正在創建一個簡單的網絡模型。 網絡包含節點。 節點發送和接收數據。

這是對網絡建模的一種方法:每個節點都有一個“數據”字段,表示該節點在時間t擁有的數據。 每個節點還有一個“發送”字段,記錄在時間t發送到其他節點的數據。

sig Node {
    data: Data -> Time,                   
    send: Data -> Node -> Time   
}

在100%聲明式和100%命令式之間的范圍內,我認為該簽名不是100%聲明式的。 在我的第一段中,我沒有提及具有數據存儲的節點,也沒有提及保留已發送數據的記錄。

另外,不是“發送”動詞嗎? 這是否表明該模型沒有盡如人意的聲明? 聲明性模型不應該只使用名詞嗎?

我希望我的模型處於100%聲明式的范圍。 為此,我必須簡單地聲明“是”。 我們開始做吧!

什么是節點:

sig Node {}

什么是在任何時候t,一個節點都有數據。

sig Node {
    data: Data -> Time
}

什么是網絡的節點之間有導線。

sig Network {
    wire: Node -> Node
}

什么是數據d在時間t和t'之間的線上?

我停在那里 我勾勒出的第二種方法更具說明性嗎? 有沒有一種更具說明性的方法?

如何以100%聲明的方式為網絡建模?

我認為您需要將模型的語義內容與其中使用的名稱分開,這是一個問題。 對我而言,聲明性模型的本質是它記錄觀察結果-可能是關於狀態或關於動態的事物(例如過渡)的邏輯表達。 另一種是操作模型,它是通過建立原始動作序列來描述行為和狀態的。 一個簡單的例子:對從集合中不確定地選擇元素的動作建模。 操作規范可能會按順序處理該集合,然后使用循環遍歷集合,在每個步驟中拋擲硬幣,並在首次出現拋頭時返回給定元素。 這為直觀的操作描述建模:“一次遍歷一組元素,然后選擇一個返回”。 聲明性規范僅表示返回值是集合的元素-無需贅述。

關於名稱在您的特定模型中的使用,對我來說,似乎更大的問題是名稱是否直接傳達了它們的含義。 因此, send給我不是一個很有幫助的名字; 一個更好的將被sentAt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM