2012-04-26
Salutations,
Aujourd’hui fut une journée de grand avancement pour PIF. En effet, nous pouvons maintenant compiler et exécuter la fonction suivante, qui donne un résultat plutôt juste :
func integrate : (f : &(x : float) -> float, x0 : float, x1 : float, n : int) -> float {
## Calcul approché d'une intégrale par la méthode des trapèzes
if x1 == x0 return 0
let dx = (x1 - x0) / (n : float)
var sum : float = 0
var i = 0
while i < n {
let x = x0 + (i : float * dx)
sum = sum + (f(x) + f(x + dx)) / 2 * dx
i = i + 1
}
return sum
}
Ou sinon j’ai ça en stock - qui tourne et qui affiche des nombres premiers, bien sûr :
func find_primes : (max : int) -> {
var i = 1
while i < max {
i = i + 1
if !is_prime(i) continue
print_int(i)
}
print_nl()
}
func is_prime : (num : int) -> bool {
var d = 2
while d*d <= num {
if num % d == 0 return false
d = d + 1
}
return true
}
(Remarque : print_int
et print_nl
sont des
fonctions externes aux programmes, mais intégrées au compilateur)
À ceux que ça choque le if
sans then
et
sans crochets non plus : en fait, j’ai choisi d’être le plus laxiste
possible sur la syntaxe, c’est à dire que tant que le compilateur est
capable de comprendre ce que vous voulez dire, alors c’est ok. Dans des
cas plus délicats il peut être nécessaire de rajouter de la ponctuation,
mais de manière générale vous mettez ce que vous voulez, comme vous
voulez pour que ça soit à votre goût. Moi je voulais mettre des
if
sans then
, et en l’occurrence ça ne pose
pas de problème donc je me le suis permis.
En bref, les poins importants qui rendent tout ça possible :
for
pour
l’instant, j’aimerai faire un joli for qui soit intégré avec la
POO, mais ça va être un peu compliqué je le sens)Ce qui sera fait bientôt :
Le code du compilateur est bien au chaud chez moi pour l’instant. Si quelqu’un en veut, je peux le mettre sur un GitHub. Il suffit de demander.