2016-04-13 5 views
0
lgstar(1,0). 
lgstar(N,Answer):- 
    (N = 2**x while x is int -> 
     N > 1, 
    N1 is N/2, 
    logbN(N1,2,A), 
    Answer is A + 1 
    ). 

In dem obigen Programm, ich versuche, die Antwort für lgstar zu erhalten, wenn N eine Zahl ist, die eine Potenz von 2 ist, dh die Ausgabe Ich wünsche lgstar (8, x) ist X = 3.SWI Prolog-Programm zu finden, den Logarithmus

Aber bei while x is int, erhalte ich die Fehler

Operator

erwartet

Kann ich den Zustand x is int so geben?

+1

Was bedeutet "while"? – false

+1

Bitte fragen Sie das nicht mehrmals. – false

+1

Und bitte informieren Sie sich, wie diese Seite funktioniert, indem Sie [die Tour] (http://stackoverflow.com/tour) lesen. – false

Antwort

0

biete ich dieses (Buggy) Snippet für Sie zu trainieren, versuchen Sie es zu verstehen, was passiert, wenn man den Schnitt entfernen ... (Hinweis: Ich ‚vergessen‘, um den Sicherheitszustand Sie bereits in Ihrem Code haben)

lgstar(1,0) :- !. 
lgstar(N,N_Lg) :- M is N>>1, lgstar(M,M_Lg), N_Lg is M_Lg+1. 
+0

Vielen Dank für Ihre Hilfe. Ich bin eigentlich neu in Swi-Prolog und danke dir für deine Führung. – Praneeth

+2

'lgstar (-1, X) .' gleich 'lgstar (1,1)' ... – false