2
sml에서 논리 단순화 프로그램을 만들고 있습니다. 하지만이 입력에 대한 문제가 있습니다.sml의 논리 단순화
- Or(Or(Var"x", Var"y"), Var"z");
val it = Or (Or (Var #,Var #),Var "z") : formula
- Simplify it;
그리고 무한 루프에 있습니다. X는 Y는 더 간단 할 수없는 경우
| Simplify (Or (x, y)) = (Simplify (Or (Simplify x, Simplify y)))
| Simplify (And (x, y)) = (Simplify (And (Simplify x, Simplify y)))
| Simplify (Not(x)) = (Simplify (Not (Simplify x)))
기본적으로, Simplify x
및 Simplify y
가 반환합니다 정말 의심스러운 세 가지 경우가 있습니다
fun Simplify (Or(True, _)) = True
| Simplify (Or(_, True)) = True
| Simplify (Or(False, False)) = False
| Simplify (Or(x, False)) = (Simplify x)
| Simplify (Or(False, x)) = (Simplify x)
| Simplify (Or (Var (x), Var (y))) = Or (Var (x), Var (y))
| Simplify (Or (x, y)) = (Simplify (Or (Simplify x, Simplify y)))
| Simplify (And(_, False)) = False
| Simplify (And(False, _)) = False
| Simplify (And(True, True)) = True
| Simplify (And(True, x)) = (Simplify x)
| Simplify (And(x, True)) = (Simplify x)
| Simplify (And(Var (x), Var(y))) = And (Var (x), Var (y))
| Simplify (And (x, y)) = (Simplify (And (Simplify x, Simplify y)))
| Simplify (Not(Not(x))) = (Simplify x)
| Simplify (Not(True)) = False
| Simplify (Not(False)) = True
| Simplify (Not(Var (x))) = (Not (Var x))
| Simplify (Not(x)) = (Simplify (Not (Simplify x)))
| Simplify True = True
| Simplify False = False
| Simplify (Var(x)) = Var(x);
그러나 그들없이 : 없음 (그리고 (AND (거짓, 바르 ("X")), 바르 ("Y를 나는 그것이 더 짧고 쉽게 읽을 수 있도록 상향식 (bottom-up) 접근 방식을 사용하여 함수를 다시 작성 "))); "True"로 단순화되지 않습니다. – user1047517
내 업데이트를 참조하십시오. 지금은 잘 작동합니다. – pad
이제 "오류 : 구문 오류 : BAR ID 삭제 중"을 많이 받았습니다. – user1047517