Ti vengono date le funzioni: h1 (f, * args) e h2 (f, * args)
Entrambi sono metodi che sono già definiti per te (qui l'asterisco indica un numero variabile di argomenti)
f è una funzione, * args è un elenco di parametri da passare a quella funzione
h1 restituisce un valore booleano: True se la funzione f si interrompe mai quando viene chiamata * args e False in caso contrario (supponendo che la macchina in esecuzione abbia tempo e memoria infiniti e che l'interprete / compilatore per la lingua in cui stai scrivendo sa come gestire il tempo e la memoria infiniti).
Se f (* args) fa mai una chiamata a h1 o h2, h1 genera un'eccezione
h2 si comporta esattamente come h1 tranne per il fatto che se f chiama a h1, allora h2 non genererà un'eccezione
Nel minor numero di caratteri possibile, scrivi un programma che non accetta input e che dovrebbe produrre:
The Collatz Conjecture is {True/False}
Goldbach's Conjecture is {True/False}
The Twin Primes Conjecture is {True/False}
basato sulla validità di ciascuna di queste congetture.
Ecco i link di Wikipedia che spiegano ciascuna delle congetture:
http://en.wikipedia.org/wiki/Collatz_conjecture
http://en.wikipedia.org/wiki/Goldbach%27s_conjecture
http://en.wikipedia.org/wiki/Twin_prime
Puoi presumere che qualsiasi libreria di interi di grandi dimensioni in qualunque lingua tu scelga di utilizzare rappresenterà correttamente interi di grandi dimensioni arbitrari. In altre parole, assumeremo che qualsiasi linguaggio / libreria in grado di esprimere 3**(3**10)sia anche in grado di esprimere 3**(3**(3**10))su una macchina sufficientemente robusta.
Ovviamente, poiché è impossibile eseguire il programma, fornire una spiegazione di come funziona insieme al codice