Поддерживает ли тип данных постоянные параметры? - PullRequest
1 голос
/ 11 июля 2020

Допустим, у меня есть следующий тип данных:

datatype Tree = Genesis | Node(parent:Tree, time: nat)

Для моего приложения можно с уверенностью предположить, что Genesis был создан в time = 0

Is возможно иметь параметр для Genesis с именем time, который всегда является некоторым значением, скажем, 0?

В настоящее время я обхожу это следующим образом:

predicate valid(tree: Tree)
{
  match tree
    case Genesis => true
    case Node(parent, time) =>
      time > (if parent == Genesis then 0 else parent.time) && valid(parent)
}

Однако я бы хотел бы выполнить sh что-то вроде этого:

predicate valid(tree: Tree)
{
  match tree
    case Genesis => true
    case Node(parent, time) =>
      time > parent.time && valid(parent)
}

Любые лиды будут полезны. Спасибо!

1 Ответ

1 голос
/ 28 июля 2020

Невозможно добавить постоянное поле в конструктор типа данных. Лучше всего, вероятно, написать функцию GetTime(tree: Tree): nat, которая обертывает ваше выражение if.

Если вы дадите больше контекста о своей проблеме, также может быть лучшее решение.

...