RPAREN EQALOP и несвязанные переменные и ошибки конструктора в SML / ML - PullRequest
2 голосов
/ 24 декабря 2010

Сказал, что у меня есть 2 логические фразы CNF a, b, и моя функция dist должна возвращать форму CNF a | b (a OR b).

Замена правил, которые у меня есть:

1) Replace p|(q&r) by (p|q)&(p|r) 
2) Replace (q&r)|p by (q|p)&(r|p) 

Опора определяется следующим образом:

datatype prop = Atom of string | Not of prop | And of prop*prop | Or of prop*prop;

Функция:

local
fun doOr(prop1,prop2) = (Or(prop1,prop2))

fun distrib1 (Or(Atom(sName1),Atom(sName2) ) ) = Or(Atom(sName1), Atom(sName2) )
    |distrib1 (Or(Not(Atom(sName1) ),Atom(sName2) ) ) = Or(Not(Atom(sName1) ), Atom(sName2) )
    | distrib1 (Or(Atom(sName1),Not(Atom(sName2) ) ) ) = Or(Atom(sName1), Not(Atom(sName2) ) )
    | distrib1 (Or(Not(Atom(sName1)),Not(Atom(sName2) ) ) ) = Or(Not(Atom(sName1)), Not(Atom(sName2) ) )
    | distrib1 (Or(prop1,And(prop2,prop3) ) ) = And( distrib1(Or(prop1,prop2) ), distrib1(Or(prop1,prop3) ) ) 
    | distrib1 (Or(And(prop1, prop2), prop3) ) ) = And( distrib1(Or(prop1,prop3) ), distrib1(Or(prop2,prop3) ) ) 

in
fun distrib (prop1,prop2) = distrib1(doOr(prop1,prop2) );
end;

Ну, я не знаю, правильна ли сама функция, хотя я только что прошел все базовые опции и правила замены, но сейчас я получаю вышеуказанные ошибки, когда EQALOP появляется после функции distrib1 и появляется ошибка конструкторов функция распределения.

Почему я получаю эти ошибки? Я не уверен, но, возможно, я должен использовать let, а не local, но тогда как я могу преобразовать его в структуру let?

Спасибо.

1 Ответ

2 голосов
/ 24 декабря 2010

В последнем случае distrib1 у вас есть всего 3 открывающие скобки, но 4 закрывающих:

| distrib1 (Or(And(prop1, prop2), prop3) ) ) =

Именно поэтому вы получаете синтаксическую ошибку о RPAREN.1006 * Вы получаете ошибку в distrib, потому что distrib1 не был определен из-за синтаксических ошибок и, следовательно, это неизвестная переменная.Исправление синтаксической ошибки в distrib1 также исправит это.

...