내 프롤로그 프로그램에서 뭔가 정규 표현식이라면 술어 reg/1
이 있습니다. 정규식의 시퀀스를 정규 표현식으로 인식하도록하고 싶습니다. 따라서 reg(a_1)
, reg(a_2)
, ..., reg(a_n)
이 모두 정규식이면 Prolog는 reg(a_1, a_2, ..., a_n)
쿼리에 대해 yes/true로 대답해야합니다. 하지만 어떻게해야할지 모르겠다.functor (프롤로그)에 대한 고정 된 아티
reg([H|T]) :- reg(H), reg(T).
reg([X]) :- reg(X).
예를 들어, reg(a)
, reg(b)
를 들어, reg(c)
는 지식 기반에서 모두, 경우, 프롤로그가/네 쿼리 reg([a, b])
또는 reg([b, a, c])
에 충실한 응답 :하지만, 내가 무슨 짓을
는 다음과 나는 reg(a, b)
또는 reg(b, a, c)
과 같은 것을 물을 수 없다. 즉, 대괄호를 제거 할 수 없다.
이것은 숙제, 그래서 사물을 표현하는 방법을 혼자 결정할 수 없습니다 : 당신이 오버 플로우 사건을 처리해야 제한된
시스템에서max_arity
와. 사실 그것은 제가 말한 것과는 조금 다릅니다. 내 프로그램은 정규 표현식으로 'is_regexp (X) : - 원자 (X).'인 원자 적 모든 것을 인식해야한다 .'; 임의의 순서에 대해'is_regexp (seq (a, b, 42, qwe)) '와 같은 질의에 대해 yes로 대답해야합니다. 그래서 제 교수가 결코 그것에 대해 말하지 않더라도'(= ..)/2'와 같은 것을 사용해야한다고 생각합니다. 아니면이 경우에는 다른가요? – Matteo
작전, 내가 틀렸다. 그들은 그것에 대해 말하고 그것을 univ라고 불렀습니다. – Matteo