그런데 문법을 공유하는 것은 가능해 보입니다.
def plus : (Nat, Nat, Nat)?
let plus := { x ← +, (x, Zero, x). }; { (x, y, z) ← plus, (x, Succ y, Succ z). }
end
는 이렇게 번역될 수 있습니다.
plus (x, Zero, x) :- x = x.
plus (x, Succ y, Succ z) :- plus (x, y, z).
그리고 질의 { (Zero, x, Zero) ← plus, x. }는 다음과 같습니다.
?- plus (Zero, x, Zero).
즉, 술어 모나드를 문법적 설탕으로 두면 양 체제가 공존할 수 있습니다. 융합은 어렵지만요.
이제 논리형 언어와 함수형 언어 인터프리터를 따로 만들면 되는데 말이 쉽죠 ㅋㅋㅋ
- dc official App
Prolog를 이 언어로 번역하려면 수고가 필요해서 실용성은 떨어지지만 - dc App
예를 들어서 { (x, Zero, x) ← plus, x. }는 x가 두 번 나타나서 { (x, Zero, y) ← plus, x = y, x. }로 바꿔야 하지만 - dc App
구리긴 구려도 제가 한 생각이어서 꼭 구현해내고 싶어요. 평생을 바쳐서라도요. - dc App
https://stackoverflow.com/questions/3228856/predicate-logic-in-haskell