Postfixowy predykat silnia !!

0

Witam,
mam za zadanie napisać postfixowy predykat w Prologu obliczający iloczyn kolejnych liczb nieparzystych.
Ma działać on w taki sposób:

X is 5!!.
X = 15.

Napisałem już swój kod:

:- arithmetic_function(!!/1).

:- op(500, xf, !!).

!!(0,1) :- !.
!!(1,1) :- !.
!!(A,B) :-
	0 is A mod 2,
	N is A - 1,
	!!(N,B),
	!.
!!(A,B) :-
	1 is A mod 2,
	N is A-2,
	!!(N,M),
	B is M*A.

Niestety SWI-Prolog sypie mi błędami:

ERROR: art.pl:16:
op/3: Type error: list' expected, found (!)!'
Warning: art.pl:16:
Goal (directive) failed: user:op(1200,xf, (!)!)
19:0: Syntax error: Operator expected
20:0: Syntax error: Operator expected
21:0: Syntax error: Operator expected
art.pl:26:0: Syntax error: Operator expected

Co poradzić?

0

Bo nie czytasz dokumentacji uważnie albo w ogóle...

Przykład działającego kodu:

:- op(200, xf, [is_cool]).

is_cool(msm).
is_cool(tezcatlipoca).
is_cool(prolog).
mądry krasnoludek w prologu napisał(a)

10 ?- msm is_cool.
true.

11 ?- prolog is_cool.
true.

12 ?- bug is_cool.
false.

13 ?- heater is_cool.
false.

Twoje błędy (na pierwszy rzut oka):

  • !! to niepoprawna nazwa na operator bo tworzy konflikt z operatorem odcięcia (cut) - !
  • prolog jest silnie typowany, w 3 arg. op ma być lista
  • dwa arg. do postfixowego operatora?

1 użytkowników online, w tym zalogowanych: 0, gości: 1