Back

PIF - Progression

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 :

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.