술어 rightBrack(E1, E2)
을 쓰려고합니다. E2
은 표현식이 E1
인데 오른쪽 대괄호 형식입니다.표현식을 오른쪽 대괄호로 변환하는 술어?
Expr ::= lit(i)
|add(Expr, Expr)
|sub(Expr, Expr)
그래서 예를 들어 E1 = add(add(add(lit(2), lit(3)), lit(4)),lit(5))
경우 다음 E2
가 add(lit(2), add(lit(3), add(lit(4), lit(5))))
나는 모든 프롤로그 편안하지 않다해야하고, 나는 그것으로 많은 경험이없는 :와 같은 표현은 정의된다. 그 말로는, 나는 작동하지 않는 다음과 같은 글을 써 보았고 어떻게 작동시키는 지 모릅니다. 어떤 도움을 주셔서 감사합니다.
rightBrack(add(add(E1, E2), E3), add(E4, add(E5, E6))) :-
rightBrack(E1, E4),
rightBrack(E2, E5),
rightBrack(E3, E6).
rightBrack(add(E1, E2), add(E3, E4)) :-
rightBrack(E1, E3),
rightBrack(E2, E4).
rightBrack(sub(E1, E2), sub(E3, E4)) :-
rightBrack(E1, E3),
rightBrack(E2, E4).
rightBrack(lit(N), lit(N)).
'l2r (1- (a + b + c), B)'와 비슷합니다. – false
no diff'rence ... – false
@false : 알아요, 나는 트리 변형에 대한 힌트를 원했기 때문에 정확한 심볼 세트를 건너 뛰었습니다. 나는 목적에 따라 이름이 바뀌었다 ... – CapelliC