Кадр 1:26 — С чем объединяется q?

У нас есть:

      (run* q
  (fresh (x)
    (== 
      `(,x)
      q)))

В этом случае `(,x)это список, в котором ссылка на переменную не заключена в кавычки.

Унифицируется ли q со списком из одного элемента?

Является результатом(_0)потому чтоqобъединяется со свежей переменнойx(даже если он есть в списке) или потому что он вообще ни с чем не унифицируется? Или в этом случае результат был бы()?

1 ответ

Унифицируется ли список с одним элементом?

Да.(== (list x) q)такой же как(== q (list x)). Оба и свежи до выполнения этой цели объединения (и не встречаются в ). После этого в подстановке записывается, что значение равно . Значение для не записывается.

Является результатом(_0)потому что унифицируется со свежей переменной (даже если она есть в списке) или потому что вообще ни с чем не унифицируется? Или в этом случае результат был бы()?

Нет, объединяется не с , а со списком, содержащим .

Когда конечное значение всегоrun*возвращается выражение, переменные "овеществляются", заменяются их значениями. не имеет значения для замены, поэтому оно печатается как , внутри списка, как это бывает, какой список является значением, связанным с .

Значением является список всех допустимых присвоений, как обычно. Существует только одна такая ассоциация для переменной и значения(list x).

Так( (_0) )должно быть напечатано как значение(run* q ...)выражение -- список из одного значения дляq, который представляет собой список, содержащий неконкретизированный x, представленный как значение_0.

Другие вопросы по тегам