2014-01-13 2 views
3

스칼라 래퍼 Datomisca을 사용하여 2 개의 규칙을 호출하는 Datomic 쿼리를 작성하려고합니다.Datomisca의 쿼리 규칙 조합

어떻게 두 개의 개별 쿼리를 결합합니까?

내 코드는 다음과 같습니다

val rule1 = Query.rules("[[(rule1 ?a) [ ... ]]]") 
val rule2 = Query.rules("[[(rule2 ?b) [ ... ]]]") 

Datomic.q(Query("""[:find ?x 
        :in $ % % 
        :where (rule1 ?a) (rule2 ?b)]"""), conn.db(), rule1, rule2) 

이) "rule1 키 확인할 수 없습니다"에 대해 나에게 오류를 제공합니다. 단 하나의 %으로 시도했지만 컴파일되지 않습니다 (형식 불일치).

Query.rules에 대한 호출에서 단일 문자열로 조합하지 말아야합니다. 다른 규칙 조합 (예 : 두 검색어가 각각 하나씩, 다른 검색어가 하나만있는 규칙)을 사용하기 위해 반복해야한다는 뜻이기 때문입니다.

매크로가 Query.rules이므로 리터럴 문자열 값을 사용해야합니다. 그렇지 않으면 컴파일되지 않습니다.

답변

1

String으로 규칙을 결합하여 결합 할 수 있습니다. 정적 유형 검사의 이점을 얻지는 못했지만 다른 방법은 찾지 못했습니다.

val rule1 = "[[(rule1 ?a) [ ... ]]]" 
val rule2 = "[[(rule2 ?b) [ ... ]]]" 

Datomic.q(Query(...), conn.db(), DString(s"[$rule1 $rule2]"), ...)