2012-04-23 4 views

답변

6

은 보안으로, 당신은 당신이 런타임에 조건을 수정하려고 SWI 경고해야합니다.

+1

Nit : 이상이 잘못된 구문입니다 (이 것을 보려면 GNU를 시도하십시오). '(=>)/2'이어야합니다. – false

+0

@false : 오, 나는 그것을 확인하는 데 사용할 수있는 통역사가 없었습니다. 고마워, 내가 편집 할거야 :) – m09

+1

그것은 항상 그와 같습니다 : 술어 표시기에 대괄호가 있으면 해당 연산자 정의가 있어야합니다. 그래서 그것은'(;)/2'와'(',')/2'입니다. 따옴표는 토큰을 구분하기 위해서만 사용됩니다. 예를 들어''a ''와 같이 연산자 선언과는 별도로 필요합니다. – false

5

(=>)/2 대신 다른 기호를 사용해야합니다. 아마도 (->)/2은 수정할 수없는 제어 구조입니다.

 
Welcome to SWI-Prolog (Multi-threaded, 32 bits, Version 6.1.3-116-gf1c7e06) 
... 
?- asserta((a -> b)). 
ERROR: asserta/1: No permission to modify static procedure `(->)/2' 
ERROR: Defined at /opt/gupu/pl-devel/lib/swipl-6.1.3/boot/init.pl:194 
?- op(500, xfx, =>). 
true. 

?- asserta(a => b). 
true. 
+0

맞아요,하지만 작동한다고 생각합니다. Prolog를 대화식으로 사용하는 경우에만! 파일을 컴파일하면 작동하지 않습니다 !! – saadtaame

+0

어떤 Prolog 시스템을 추천합니까? SWI, YAP, B, GNU는 모두 같습니다. – false

+0

제목에 있습니다 (SWI-Prolog) – saadtaame