vrijdag 4 juli 2026

# Voorbeeld uit Turing, A.M. On computable numbers, etc. Proceedings of the London Mathematical Society, 1936.
# Positie telt vanaf 1 in uitvoer (intern vanaf 0)

g = [None] # Start inhoud van geheugen
p = 0 # Start positie in geheugen
s = "b" # Start status
n_max = 5 # Aantal uit te voeren operaties
n = 0

def r(geheugen, positie):
    positie +=1
    if positie > len(geheugen) - 1:
        geheugen.append(None)
        print(" R uitgevoerd.\n    Geheugen: " + str(geheugen) + "\n    Omvang: " + str(len(geheugen)) + "\n    Positie: " + str(positie + 1))
    else:
        print(" R uitgevoerd.\n    Positie: " + str(positie + 1))
    return geheugen, positie

def l(geheugen, positie):
    positie -= 1
    if positie < 0:
        raise Exception("Verder terug dan positie 1 kan niet")
    print(" L uitgevoerd.\n    Positie: " + str(positie + 1))
    return geheugen, positie

def lees(geheugen, positie):
    symbool = geheugen[positie]
    print(" Lees symbool: " + str(symbool) + " op positie: " + str(positie + 1))
    return symbool;

def schrijf(geheugen, positie, symbool):
    geheugen[positie] = symbool;
    print(" Schrijf symbool: " + str(symbool) + " op positie: " + str(positie + 1) + "\n    Geheugen: " + str(geheugen) + "\n    Positie: " + str(positie + 1))
    return geheugen, positie

def wis(geheugen, positie):
    schrijf(geheugen, positie, None);
    print(" Wis uitgevoerd.\n    Geheugen: " + str(geheugen) + "\n    Positie: " + str(positie + 1))
    return geheugen, positie

def ga_naar_status(status, nieuwe_status):
    if status == nieuwe_status:
        print(" Behoud status: " + nieuwe_status)
    else:
        print(" Ga naar status: " + nieuwe_status)
    status = nieuwe_status
    return status
        
def op(geheugen, positie, status, n):
    print("Start operatie " + str(n + 1))
    symbool = lees(geheugen, positie)

    if status == "b":
        geheugen, positie = schrijf(geheugen, positie, "a")
        geheugen, positie = r(geheugen, positie)
        geheugen, positie = schrijf(geheugen, positie, "a")
        geheugen, positie = r(geheugen, positie)
        geheugen, positie = schrijf(geheugen, positie, 0)
        geheugen, positie = r(geheugen, positie)
        geheugen, positie = r(geheugen, positie)
        geheugen, positie = schrijf(geheugen, positie, 0)
        geheugen, positie = l(geheugen, positie)
        geheugen, positie = l(geheugen, positie)
        status = ga_naar_status(status, "o")

    elif status == "o":
        if symbool == 1:
            geheugen, positie = r(geheugen, positie)
            geheugen, positie = schrijf(geheugen, positie, "x")
            geheugen, positie = l(geheugen, positie)
            geheugen, positie = l(geheugen, positie)
            geheugen, positie = l(geheugen, positie)
            status = ga_naar_status(status, "o")
        elif symbool == 0:
            status = ga_naar_status(status, "q")
        else:
            raise Exception("Symbool 0 of 1 verwacht. Aangetroffen: " + str(symbool))

    elif status == "q":
        if symbool == 0 or symbool == 1:
            geheugen, positie = r(geheugen, positie)
            geheugen, positie = r(geheugen, positie)
            status = ga_naar_status(status, "q")
        elif symbool == None:
            geheugen, positie = schrijf(geheugen, positie, 1)
            geheugen, positie = l(geheugen, positie)
            status = ga_naar_status(status, "p")
        else:
            raise Exception("Symbool 0, 1 of None verwacht. Aangetroffen: " + str(symbool))

    elif status == "p":
        if symbool == "x":
            geheugen, positie = wis(geheugen, positie)
            geheugen, positie = r(geheugen, positie)
            status = ga_naar_status(status, "q")
        elif symbool == "a":
            geheugen, positie = r(geheugen, positie)
            status = ga_naar_status(status, "f")
        elif symbool == None:
            geheugen, positie = l(geheugen, positie)
            geheugen, positie = l(geheugen, positie)
            status = ga_naar_status(status, "p")
        else:
            raise Exception("Symbool x, a of None verwacht. Aangetroffen: " + str(symbool))
            
    elif status == "f":
        if symbool == None:
            geheugen, positie = schrijf(geheugen, positie, 0)
            geheugen, positie = l(geheugen, positie)
            geheugen, positie = l(geheugen, positie)
            status = ga_naar_status(status, "o")
        else:
            geheugen, positie = r(geheugen, positie)
            geheugen, positie = r(geheugen, positie)
            status = ga_naar_status(status, "f")

    else:
        raise Exception("Onbekende status aangetroffen: " + str(status))    
    
    n += 1
    return geheugen, positie, status, n

print("Start situatie\n Geheugen: " + str(g) + "\n Omvang: " + str(len(g)) + "\n Positie: " + str(p + 1) + "\n Status: " + s)
while n < n_max:
    g,p,s,n = op(g,p,s,n)

print("Eind situatie\n Geheugen: " + str(g) + "\n Omvang: " + str(len(g)) + "\n Positie: " + str(p + 1) + "\n Status: " + s)

Nummer 1070 · vorige · index · volgende · 0o2056