Bläddra i källkod

Added first parts of a random library

Yentl Van Tendeloo 9 år sedan
förälder
incheckning
379b32f06a
2 ändrade filer med 24 tillägg och 6 borttagningar
  1. 0 6
      bootstrap/compilation_manager.alc
  2. 24 0
      bootstrap/random.alc

+ 0 - 6
bootstrap/compilation_manager.alc

@@ -43,7 +43,6 @@ Element function compilation_manager():
 
 		objs = create_node()
 		obj = input()
-		log("linking and loading")
 		while (obj != ""):
 			if (dict_in(root, obj)):
 				set_add(objs, obj)
@@ -51,7 +50,6 @@ Element function compilation_manager():
 				log("ERROR: couldn't find obj " + obj)
 			obj = input()
 
-		log("Start link and load!")
 		link_and_load(root, objs)
 	elif (operation == "is_defined"):
 		object_name = input()
@@ -109,7 +107,6 @@ Boolean function check_symbols(root : Element, objs : Element):
 				log("ERROR: undefined symbol " + key)
 				return False
 
-	log("Symbol checking OK")
 	return True
 
 Void function link_and_load(root : Element, objs : Element):
@@ -118,13 +115,10 @@ Void function link_and_load(root : Element, objs : Element):
 
 	if (check_symbols(root, objs)):
 		output(True)
-		log("Linking")
 		while (0 < list_len(objs)):
 			obj = set_pop(objs)
 			func = root[obj]["initializers"]
 			exec(func)
-
-		log("Loading")
 		main()
 	else:
 		output(False)

+ 24 - 0
bootstrap/random.alc

@@ -0,0 +1,24 @@
+Integer seed = 1
+
+Float function random():
+	// Linear Congruential Generator
+	Integer a
+	Integer c
+	Integer m
+
+	// Parameters from Numerical Recipes
+	a = 1664525
+	c = 1013904223
+	m = 4294967296
+
+	// Do the generation and update the seed
+	seed = integer_mod(a * seed + c, m)
+
+	// The seed is the new value
+	return seed / m
+
+Integer function random_interval(a : Integer, b : Integer):
+	return cast_f2i(rand * (b - a) + a)
+
+Element function random_choice(list : Element):
+	return list_read(random_interval(0, list_len(list) - 1))