2012-02-18 4 views
8

루아에서 logic programming (프롤로그 생각하기) 할 방법이 있습니까?루아의 논리 프로그래밍?

특히 : 논리 프로그래밍을위한 모든 Lua 모듈이 있습니까 (miniKanren 구현이 최상일 수 있지만 반드시 필요한 것은 아닙니다)? 나는 [1]을 찾을 수 없었기 때문에. 그리고 그렇지 않다면, Lua에서 어떻게 로직 프로그래밍을하는 지 잘 알려진 (선호한다면) 방법이 있습니까?

기타 : 루아에서 논리 프로그래밍과 같은 것을 시도한 사람이 있습니까?


[1] 지금까지 난 단지 blog post Metalua 하나를 작성의 가능성을 언급 발견했습니다,하지만 난 오히려 표준 루아와 호환을 볼 것입니다.

+1

모든 프로그래밍 로직되지 않습니다 입력을 감안할 때? 논리 프로그래밍에 익숙하지 않은 사람들을 위해 약간 정교 할 수 있습니다. 메타 테이블을 사용하여 무언가를 꾸밀 수 있다고 확신합니다. – jpjacobs

+0

좋아, 논리 프로그래밍에 대한 몇 가지 힌트를 추가했습니다 ... 알다시피, 나는 메타 테이블을 가지고 노는 것과 같은 것을 시도 할 수 있습니다.하지만 처음에는 다른 사람들이 저에게 전에 이런 짓을 시도했는지 알고 싶었습니다 ... – mnicky

+0

두 번째로 'Lua'로직 프로그래밍을위한 두 번째 히트작 인 "library"는 Lua에서 다중 패러다임 프로그래밍에 관한 pdf를 제공한다. 여기서는 5 장에서 프롤로그에 대한 참조가있다. 완전한 라이브러리는 아니지만 (하나만있는 것처럼 보이지는 않습니다) 몇 가지 지침을 줄 수 있습니다. – jpjacobs

답변

-1

논리 프로그래밍은 패러다임이며, 따라서 사실 자체가 다른 방정식의 결과 일 수있는 반면, 일부 사실과 그 사실의 논리적 방정식에 대한 기본 결과를 명시하는 특정 구문의 한 형태입니다.

루아가 특별히 설계된 것은 아니지만 모든 논리 프로그래밍 연산자를 함수로 정의하면 쉽게이 동작을 시뮬레이션 할 수 있습니다. 즉, function and(...)은 모든 인수가 true 일 경우에만 true을 반환하고 "사실 "metatable에 의해 제공된 게으른 평가를 가진 테이블로서.

1

이 루아의 미래 체인 추론 엔진이다 lua-faces이라고합니다. MiniKanRen 이외에 Castl을 사용하여 자동으로 Lua로 번역 될 수있는 several other logic programming systems in JavaScript이 있습니다.

또한 Lua의 하위 집합을 Prolog로 변환하는 wrote a translator입니다. 이 프롤로그에서이 출력을 생성

function print_each(The_list) 
    for _, Item in pairs(The_list) do 
     print(Item) 
    end 
end 

:

print_each(The_list) :- 
    forall(member(Item,The_list),(

     writeln(Item) 
    )).