2017-02-24 4 views
1

J'ai une affectation de programmation ML et dans plusieurs des fonctions, il serait utile de garder le compte. Par exemple, dans une fonction, j'ai besoin de retourner une liste d'index où un élément apparaît. Je ne sais pas comment suivre ces choses en récursion, comme jamais un appel de fonction tue mon compte. Dans le monde réel, je dirais une variable de compte, mais ce n'est pas une option à l'école. Des conseils?Comment devrais-je compter dans une fonction récursive? Sans récursion de queue, ou paramètres supplémentaires

+1

Pourquoi récursion queue pas une option? – Yawar

+2

Vous devez transmettre à une fonction les informations dont la fonction a besoin pour effectuer son travail. Pourquoi ne pouvez-vous pas créer des fonctions auxiliaires avec des paramètres supplémentaires? De telles choses sont souvent faites en ML. La définition de la fonction d'aide peut être purement locale à la fonction (en utilisant 'let fun ... in ... end), donc en ce sens la fonction globale n'est pas encombrée par des paramètres supplémentaires. –

+0

@Yawar, les ordres des enseignants. –

Répondre

2

Si vous pouvez utiliser une fonction d'assistance, vous pouvez utiliser la récursion de queue. Votre professeur ne vous donnerait pas un problème de récursivité qui vous oblige à utiliser des techniques autres que pur récursion

Le motif de ces fonctions est généralement:

fun outer list = 
    let 
    fun inner param inner_list = 
     (* use tail recursion here *) 
    in 
    inner initial_param list 
    end 
+0

Je vais utiliser let, in, end, sur au moins un problème pour avoir une idée de cela. Au fait, je suis jaloux, vous devez tenir la tasse! Merci de votre aide. –

+0

Acclamations Désolé, il suffit de corriger la syntaxe. Je pensais probablement à OCaml quand je l'ai écrit initialement. – Yawar