Exemple #1
0
def _query(pl=None, query=None, debug=False):
    if not query:
        return
    if not pl:
        pl = Prolog()
        pl.consult('init.pl')
    if isinstance(query[0], str):
        query = [query]
    query_list = []
    var_list = []
    for pred, args in query:
        arg_list = []
        for arg in args:
            if (isinstance(arg, str) and arg[:3] == '_v:'):
                # and arg[0] == arg[0].upper()
                var = arg[3:]
                var_list += [var]
                arg_list += [var]
            elif (isinstance(arg, str) and '^^' in arg):
                arg_list += [arg]
            elif (isinstance(arg, list)):
                arg_list += [f"{arg}"]
            else:
                arg_list += [f"'{arg}'"]
        arg_str = ','.join(arg_list)
        query_list += [pred + '(' + arg_str + ')']
    query_str = ','.join(query_list)
    if debug:
        print(query_str, end="\n\n")
    return var_list, pl.query(query_str)
def findShortestPath(from_input, to_input):
    prolog = Prolog()
    loadDatabase(prolog)
    prolog_query = "path(" + from_input + "," + to_input + ",PATH,COST)"
    shortest_path_result = list(prolog.query(prolog_query))
    path_list = []
    shortest_path_lst = shortest_path_result

    if len(shortest_path_lst) <= 0:
        return False

    for i in range(len(shortest_path_lst[0]['PATH'])):
        path_list.append(str(shortest_path_result[0]['PATH'][i]))

    train_query = "theTrainIs(" + str(path_list) + ",TRAIN)"
    train_result = list(prolog.query(train_query))

    train_list = []
    for i in range(len(train_result[0]['TRAIN'])):
        train_list.append(str(train_result[0]['TRAIN'][i]))

    path_type_list = []
    include_walk_query = "includeWalk(" + str(train_list) + ",PATH_TYPE)"
    include_walk_result = list(prolog.query(include_walk_query))
    for i in range(len(include_walk_result[0]['PATH_TYPE'])):
        path_type_list.append(str(include_walk_result[0]['PATH_TYPE'][i]))

    print("Train: " + str(train_list))
    print ""
    print("Train+Walk: " + str(path_type_list))
    print ""
    print("TrainLen: " + str(len(train_list)) + "->" +
          str(len(path_type_list)))

    return path_list, shortest_path_result[0]['COST']
Exemple #3
0
def main():
    registerForeign(hello)
    prolog = Prolog()
    #prolog.assertz("father(michael,john)")
    #prolog.assertz("father(michael,gina)")
    #list(prolog.query("father(michael,X), hello(X)"))
    Query(readFileSee('/home/tyler/Documents/Github/crosswordSolver/word_list.txt')))
def main():
    prolog = Prolog()

    #membuka file coins.pl
    prolog.consult("prolog_file/coins.pl")

    #mendeklarasi nilai count dan total
    #menginputkan nilai count dan nilai total berupa angka
    count = int(input("Berapa jumlah koin(default: 100)? ") or 100)
    total = int(input("Jumlah target total (default: 500)? ") or 500)

    #melakukan perulangan dengan menampilkan nilai yang ada di dalam list
    #enumerate berfungsi untuk mengembalikan sebuah objek iterable yang setiap itemnya memiliki indeks
    #memanggil fungsi coins pada prolog
    for i, soln in enumerate(prolog.query("coins(S, %d, %d)." %
                                          (count, total))):
        # [1,5,10,50,100]
        S = zip(soln["S"], [1, 5, 10, 50, 100])
        print(i),  #cetak nilai

        #melakukan perulangan untuk menampilkan angka perkalian
        for c, v in S:
            print("%dx%d" % (c, v)),  #cetak perkalian
        print  #cetak hasil perulangan

    #fungsi list yaitu mengembalikan list berisi anggota-anggota dari objek yang menjadi argumennya
    #jika argumennya kosong, maka fungsi ini akan mengembalikan list kosong
    #jika argumennya berisikan data, maka yang digunakan adalah data-data yang digunakan dari list tersebut
    #hasil akhirnya akan menampilkan perhitungan perkalian dari jumlah nilai yang diinputkan
    list(prolog.query("coins(S, %d, %d)." % (count, total)))
Exemple #5
0
def query_prolog(data, output):
    from pyswip.prolog import Prolog
    from pyswip.easy import call, Functor, registerForeign

    prolog = Prolog()  # handle for Prolog interpreter

    # Fetch Prolog inputs
    distance = str(data[0])
    price = str(data[1])
    type = str(data[2])
    veg_options = str(data[3])

    # open KB file from static location
    prolog.consult('static/KB.pl')

    # assert knowledge at top of KB
    prolog.asserta("veg_options(" + veg_options + ")")
    prolog.asserta("distance(" + distance + ")")
    prolog.asserta("price(" + price + ")")
    prolog.asserta("type(" + type + ")")

    # get results from KB
    results = [
        sol['X'] for sol in prolog.query("recommendation(X).", maxresult=1)
    ]

    if results:
        output.put(("You should eat at " + results[0] + "!"))
    else:
        output.put(("No restaurant could be identified!"))
Exemple #6
0
def main():
    def notify(t):
        print "move disk from %s pole to %s pole." % tuple(t)
    notify.arity = 1
        
    prolog = Prolog()
    registerForeign(notify)
    prolog.consult("hanoi.pl")
    list(prolog.query("hanoi(%d)" % N))
Exemple #7
0
 def __init__( self, director, dificuldade ):
     super( GameLayer, self ).__init__()
     
     self.director = director
     self.tabuleiro = []
     self.offsetX = director.get_window_size()[0]/3
     self.offsetY = director.get_window_size()[1]/8
     lado = 45
     self.lado = lado
     self.dificuldade = dificuldade
     
     self.cpu = False
     
     self.prolog = Prolog()
     self.prolog.consult("reversi.pl")
     self.tabMatriz = list(self.prolog.query("novotab(X)"))[0]['X']
     self.matriz = deepcopy(self.tabMatriz)
     
     pyglet.font.add_directory('.')
     self.jogadorAtivo = Label("Jogador: Player1", font_name = 'Blood Of Dracula', font_size = 22,
                              x = 20, y = 350)
     self.add(self.jogadorAtivo)
     self.dif = Label("Dificuldade: " + self.dificuldade, font_name = 'Blood Of Dracula', font_size = 16,
                              x = 20, y = 300)
     self.add(self.dif)
     self.p = list(self.prolog.query("winner(" + str(self.tabMatriz) + ", P0, P1, P2)"))[0]
     self.p1 = Label("P1: " + str(self.p['P1']) + self.dificuldade, font_name = 'Bloodsuckers', font_size = 26,
                              x = 20, y = 200)
     self.p2 = Label("P1: " + str(self.p['P2']) + self.dificuldade, font_name = 'Bloodsuckers', font_size = 26,
                              x = 20, y = 150)
     self.add(self.p1)
     self.add(self.p2)
     
     #Batch que vai segurar todos os pecas
     self.spriteBatch = BatchNode()
     self.add(self.spriteBatch)
     
     size = 8*self.lado
     for i in range(8):
         l = []
         for j in range(8):
             peca = Peca(self.tabMatriz[i][j], (j*lado + lado/2, size - (i*lado + lado/2)))
             l.append(peca)
             self.spriteBatch.add(peca)
         self.tabuleiro.append(l)
         
     self.spriteBatch.add(Sprite("tabuleiro.png", 
                                 (self.tabuleiro[4][4].position[0] - lado/2, self.tabuleiro[4][4].position[1] + lado/2) 
                                 , 0, 1, 32), 0)
     
     self.spriteBatch.position = (self.offsetX, self.offsetY)
     self.spriteBatch.scale = 1.0        
     
     self.hud = GameHud()
     self.add(self.hud)
     
     self.schedule(self.gameLoop)
Exemple #8
0
 def prologInitialization(self):
     print "@Agent: Prolog initialization",
     self.prolog = Prolog()
     self.prolog.consult("pl/agent.pl")
     if (self.logToFile):
         self.prolog.query("redirect_output('logs/%s-kb%d.xml')" %
                           (self.username, self.currentLoop)).next()
     if (self.verbose):
         self.prolog.query("assert(verbose)").next()
     print "done"
Exemple #9
0
def main():  #digunakan untuk membuat fungsi main()
    N = 3  #pendeklarasian nilai N adalah 3
    INTERACTIVITY = True

    prolog = Prolog()
    tower = Tower(N, INTERACTIVITY)
    notifier = Notifier(tower.move)
    registerForeign(notifier.notify)
    prolog.consult("prolog_file/hanoi.pl")
    list(prolog.query("hanoi(%d)" % N))
Exemple #10
0
def main():
    N = 3
    INTERACTIVITY = True

    prolog = Prolog()
    tower = Tower(N, INTERACTIVITY)
    notifier = Notifier(tower.move)
    registerForeign(notifier.notify)
    prolog.consult("hanoi.pl")
    list(prolog.query("hanoi(%d)" % N))
Exemple #11
0
def imprimirRest():
    p = Prolog()
    p.consult('rest.pl')
    resultados = []
    for result in p.query("restaurante(A,_,_,_,_)"):
        r = result["A"]
        resultados.append(str(r))
    log = file("log.txt", "a")
    log.write(str(resultados) + "\n")
    log.close()
    return resultados
Exemple #12
0
    def __init__(self):

        # http://nullege.com/codes/search/pyswip.prolog.Prolog.query
        self.__root = ''
        self.__on_prolog = 'prolog'
        self.__of_prolog = 'halt.'

        # Preguntas
        self.__a_animal = 'animal(X).'
        self.__prolog = Prolog()
        self._probando()
Exemple #13
0
def imprimirPlato():
    p = Prolog()
    p.consult("plati.pl")
    resultados = []
    for plato in p.query("platillo(_,A,_,_,_)"):
        r = plato["A"]
        resultados.append(str(r))
    log = file("log.txt", "a")
    log.write(str(resultados) + "\n")
    log.close()
    return resultados
Exemple #14
0
def restaurantesXtipo(tipocomida):
    p = Prolog()
    p.consult("rest.pl")
    resultados = []
    for restaurante in p.query("restaurantesXtipo(A," + tipocomida + ")"):
        r = restaurante["A"]
        resultados.append(str(r))
    log = file("log.txt", "a")
    log.write(str(resultados) + "\n")
    log.close()
    return resultados
Exemple #15
0
def buscaRestaurantesXPais(pais):
    p = Prolog()
    p.consult("plati.pl")
    resultados = []
    for restaurante in p.query("buscaRestXPais(Nombre," + pais + ")"):
        r = restaurante["Nombre"]
        resultados.append(str(r))
    log = file("log.txt", "a")
    log.write(str(resultados) + "\n")
    log.close()
    return resultados
    def test_load_database(self):
        try:
            prolog = Prolog()
            loadDatabase(prolog)

        except:
            print("ERROR: cannot load database")

        finally:
            # do something after show msg
            pass
Exemple #17
0
def run_prolog(pipe):
    prolog = Prolog()
    while True:
        request = pipe.recv()
        if request == 0:
            break
        request, args = request
        func = getattr(prolog, request)
        result = func(*args)
        if result is not None:
            result = list(result)
        pipe.send(result)
Exemple #18
0
def main():
    prolog = Prolog()
    prolog.consult("puzzle1.pl")
    for soln in prolog.query("solve(B)."):
        #B = eval(soln["B"])
        B = soln["B"]
        # [NW,N,NE,W,E,SW,S,SE]
        print "%d %d %d" % tuple(B[:3])
        print "%d   %d"   % tuple(B[3:5])
        print "%d %d %d" % tuple(B[5:])
        
        cont = raw_input("Press 'n' to finish: ")
        if cont.lower() == "n": break
def main():
    prolog = Prolog()
    prolog.consult("puzzle.pl")  #membaca file prolog (puzzle.pl)
    for soln in prolog.query("solusi(B)."):
        #B = eval(soln["B"])
        B = soln["B"]
        # [NW,N,NE,W,E,SW,S,SE]
        print("%d %d %d" % tuple(B[:3]))
        print("%d   %d" % tuple(B[3:5]))
        print("%d %d %d" % tuple(B[5:]))

        cont = input("Tekan 'n' untuk selesai: ")
        if cont.lower() == "n": break
Exemple #20
0
def main():
    prolog = Prolog()
    prolog.consult("coins.pl")
    count = int(input("How many coins (default: 100)? ") or 100)
    total = int(input("What should be the total (default: 500)? ") or 500)
    for i, soln in enumerate(prolog.query("coins(S, %d, %d)." % (count,total))):
        # [1,5,10,50,100]
        S = list(zip(soln["S"], [1, 5, 10, 50, 100]))
        print(i, end=' ')
        for c, v in S:
            print("%dx%d" % (c,v), end=' ')
        print()
    list(prolog.query("coins(S, %d, %d)." % (count,total)))
Exemple #21
0
def platillosXrestIngrediente(restaurante, ingrediente):
    p = Prolog()
    p.consult("plati.pl")
    resultados = []
    resultados.append("Lista de platillos de " + restaurante +
                      " que incluyen " + ingrediente + ":")
    for restaurante in p.query("platillosXrestIngrediente(" + restaurante +
                               ",Nombre,Sabor,Pais," + ingrediente + ")"):
        resultados.append(restaurante["Nombre"])
    log = file("log.txt", "a")
    log.write(str(resultados) + "\n")
    log.close()
    return resultados
def main():
    prolog = Prolog()
    prolog.consult("prolog_file/puzzle1.pl")  #membuka file prolog puzzle.pl
    for soln in prolog.query(
            "solve(B)."):  #menjalankan predikat solve seperti pada file prolog

        B = soln["B"]
        # [NW,N,NE,W,E,SW,S,SE]
        print("%d %d %d" % tuple(B[:3]))  #mencetak angka pada papan
        print("%d   %d" % tuple(B[3:5]))
        print("%d %d %d" % tuple(B[5:]))

        cont = input("Press 'n' to finish: ")
        if cont.lower() == "n": break  #jika ditekan n, program selesai
Exemple #23
0
def main():
    prolog = Prolog()
    prolog.consult("kanankiri.pl")  #membaca file prolog (kanankiri.pl)
    kiri = int(input("Berapa jumlahnya kiri? ") or 10)
    total = int(input("Berapa total semuanya? ") or 100)
    for i, soln in enumerate(
            prolog.query("kanankiri(S, %d, %d)." % (kiri, total))):

        S = zip(soln["S"], [1, 5, 10, 50, 100])
        print(i),
        for c, v in S:
            print("%dx%d" % (c, v))
        print()
    list(prolog.query("kanankiri(S, %d, %d)." % (kiri, total)))
Exemple #24
0
def findShortestPath(from_input, to_input):
    prolog = Prolog()
    loadDatabase(prolog)
    prolog_query = "path(" + from_input + "," + to_input + ",PATH,COST)"
    shortest_path_result = list(prolog.query(prolog_query))
    path_list = []
    shortest_path_lst = shortest_path_result

    if len(shortest_path_lst) <= 0:
        return False

    for i in range(len(shortest_path_lst[0]['PATH'])):
        path_list.append(str(shortest_path_result[0]['PATH'][i]))

    return path_list, shortest_path_result[0]['COST']
Exemple #25
0
    def modified_run(self):
        try:
            from pyswip.prolog import Prolog
            p = Prolog()
            p.assertz('setup_prolog(1)')
            list(p.query('setup_prolog(1)'))
        except:
            print('----------------------')
            print('There is a problem with SWI-Prolog Installation')
            print(
                'Please, check if you have it installed with shared Libraries')
            print(
                'Installation guide: https://github.com/yuce/pyswip/blob/master/INSTALL'
            )
            print('----------------------')

        orig_run(self)
def main():
    prolog = Prolog()
    
    a1 = PL_new_term_refs(2)
    a2 = a1 + 1
    t = PL_new_term_ref()
    ta = PL_new_term_ref()

    animal2 = PL_new_functor(PL_new_atom("animal"), 2)
    assertz = PL_new_functor(PL_new_atom("assertz"), 1)

    PL_put_atom_chars(a1, "gnu")
    PL_put_integer(a2, 50)
    PL_cons_functor_v(t, animal2, a1)
    PL_cons_functor_v(ta, assertz, t)
    PL_call(ta, None)
    
    print(list(prolog.query("animal(X,Y)", catcherrors=True)))
Exemple #27
0
  def partial_diagnosis(self, symptoms):

    prolog = Prolog()

    for file in self.prolog_files:
      prolog.consult(file)

    differntial_diagnosis = []

    for symptom in symptoms:
      for result in prolog.query('hasSymptom(Illness, %s)' % symptom):
        differntial_diagnosis.append(result['Illness'])

    sick_list = []

    # Removes multiple illnesses from the list
    sick_list = list(set(differntial_diagnosis))

    return sick_list
Exemple #28
0
def main():
    """
    Trying to modify this example https://github.com/yuce/pyswip/blob/master/examples/coins/coins.py 
    to provide a nice pythonic interface to petyhaker's code
    """
    prolog = Prolog()
    prolog.consult("agent.pl")

    count = int(raw_input("How many coins (default: 100)? ") or 100)
    total = int(raw_input("What should be the total (default: 500)? ") or 500)
    for i, soln in enumerate(prolog.query("coins(S, %d, %d)." %
                                          (count, total))):
        # [1,5,10,50,100]
        S = zip(soln["S"], [1, 5, 10, 50, 100])
        print i,
        for c, v in S:
            print "%dx%d" % (c, v),
        print
    list(prolog.query("coins(S, %d, %d)." % (count, total)))
Exemple #29
0
def buscaRestaurantesXNombre(nombre):
    p = Prolog()
    p.consult("rest.pl")
    resultados = []
    for restaurante in p.query("buscaRest(" + nombre + ",A,B,C,D)"):
        temporal = []
        tipo = restaurante["A"]
        ubicacion = restaurante["B"]
        telefono = str(restaurante["C"])
        jornada = restaurante["D"]
        temporal.append(str(tipo))
        temporal.append(str(ubicacion))
        temporal.append(str(telefono))
        temporal.append(str(jornada))
        temporal.append("Fin de restaurante")
        resultados.append(temporal)
        temporal = []
    log = file("log.txt", "a")
    log.write(str(resultados) + "\n")
    log.close()
    return resultados
Exemple #30
0
def buscaPlatillosRest(restaurante):
    p = Prolog()
    p.consult("plati.pl")
    resultados = []
    for restaurante in p.query("platillosXrest(" + restaurante +
                               ",Nombre,Sabor,Pais,Ingredientes)"):
        temporal = []
        temporal.append("Nombre: " + str(restaurante["Nombre"]))
        temporal.append("Sabor: " + str(restaurante["Sabor"]))
        temporal.append("Pais de origen: " + restaurante["Pais"])
        t = ""
        for i in list(restaurante["Ingredientes"]):
            t += str(i) + " - "
        temporal.append(str("Ingredientes: " + t))
        t = ""
        resultados.append(temporal)
        temporal = []
    log = file("log.txt", "a")
    log.write(str(resultados) + "\n")
    log.close()
    return resultados