Un collega ha detto di aver sentito parlare di un linguaggio che non aveva il concetto di "se". È possibile? Se sì, che lingua è?lingua senza se?
risposta
Credo che un linguaggio debba avere alcuni metodi per selezionare, per essere Turing-Complete. Tuttavia, questo significa che non dovrebbe essere la tua forma classica di dichiarazione dei fatti.
Probabilmente l'esempio più familiare sarebbero i linguaggi di espressioni regolari. (a | b *) prende una decisione in base a ciò che si trova sui lati opposti di quello |
. Non è esattamente una dichiarazione "se".
Esistono linguaggi logici composti da istruzioni. Il risultato di una query è una valutazione logica che verifica se il risultato può essere assunto dal gruppo di regole "codificate".
Vedere ad esempio Prolog.
Oltre a Prolog, non conosco alcuna lingua specifica, ma posso pensare a un paio di modi in una lingua senza se le istruzioni possono funzionare. In effetti, non hai nemmeno bisogno di costrutti di loop. Ovviamente hai bisogno di un qualche modo di rami condizionali e di cicli.
Se, ad esempio, si aveva le seguenti caratteristiche: funzioni, stile ML pattern matching su argomenti di funzione e ottimizzazione coda chiamata, si potrebbe programmare senza se di o loop.
foo() {
for (i = 1 to 10) {
if even(i) {
print "even"
}
}
}
sarebbe diventato soemthing come
print_if_true (true) {
print "even"
}
print_if_true (false) {}
foo_loop (11) {
}
foo_loop (n) {
print_if_true(even(n))
foo_loop(n+1)
}
foo() {
foo_loop(1)
}
o con la sintassi ML-like:
foo =>
let loop 11 => 0
n => p_i_t(n), loop n + 1
and p_i_t true => print "even"
_ => unit
in
loop 1
end
Naturalmente, è ancora necessario i soliti operatori di confronto e quindi è possibile utilizzare semplici vero/corrispondenza del modello dell'argomento funzione falsa invece dei condizionali. Oppure potresti abbinare su valori arbitrari. O il linguaggio potrebbe supportare espressioni di guardia, che sono fondamentalmente le istruzioni che determinano se un sovraccarico di funzione è valido o meno.
L'esempio sopra è ovviamente ideato e il codice senza ifs/loops è molto più brutto e difficile da capire dell'originale, ma dimostra come si può fare. Funzioni linguistiche più o diverse possono rendere possibile scrivere programmi puliti senza if/loops.
Un altro modo sarebbe qualcosa di simile, se è vero == 1 e falso == 0.
[function(){else-clause}, function(){then-clause}][condition]()
Cioè, memorizzare il ramo vero e il falso in una lista o tupla o quello che hanno che possono essere indicizzato da vero e falso e quindi utilizzare il risultato della condizione come indice, cercare il ramo e chiamare la funzione. Se la tua lingua supporta le macro, potrebbe essere possibile tradurre i condizionali tradizionali in questo formato.
Questa implementazione dell'array mi ha fatto impazzire. –
Smalltalk, che è considerato come un "vero" linguaggio orientato agli oggetti, non ha istruzione "if" e non ha istruzione "for", nessuna istruzione "while". Ci sono altri esempi (come Haskell) ma questo è buono. Fonte: Without ifs
Smalltalk, tuttavia, definisce "ifTrue:" e "ifFalse:", nonché "whileTrue:" e "whileFalse:" – jer
C++ di programmazione modello non ha un 'se' costruire, ma è Turing-complete tramite modello di specializzazione:
template <int N>
struct Factorial
{
enum { value = N * Factorial<N - 1>::value };
};
template <>
struct Factorial<0>
{
enum { value = 1 };
};
// Factorial<4>::value == 24
// Factorial<0>::value == 1
wow ............ – JoelFan
- 1. linguaggio basato su JVM senza runtime lingua
- 2. Django lingua predefinita i18n senza percorso prefissi
- 3. cambio lingua senza modificare la pagina corrente
- 4. c lingua se dichiarazione con sizeof
- 5. Creare i kernel della lingua per IPython per una lingua senza associazioni ZeroMQ
- 6. Come ottenere la lingua senza paese da CultureInfo
- 7. Maiuscole/minuscole UTF-8 senza conoscere la lingua
- 8. Come determinare se una lingua è LL (1)?
- 9. Il layout cambia se la lingua del dispositivo è l'arabo
- 10. Verifica se una variabile è definita in lingua template templating
- 11. Controllare se gli elementi esistono nella lingua corrente?
- 12. Torna alla lingua predefinita se manca la traduzione
- 13. lingua filtro solo se il tipo è letterale
- 14. Lingua di comando della lingua naturale
- 15. Convertire tre lettere del codice lingua identificativo della lingua (LANGID)
- 16. Lingua inglese cambia lingua delle etichette?
- 17. Rileva lingua
- 18. Rilevamento lingua forza bruta
- 19. Non esiste una "lingua compilata" o una "lingua interpretata"
- 20. Lingua Metal Shading - Uscita (console)?
- 21. Variazione semantica in lingua
- 22. Lua come lingua web
- 23. Get nome di lingua in quella lingua dal codice di lingua
- 24. Cambia lingua tradotta gettext con la lingua originale
- 25. Cambio lingua all'interno dell'app android
- 26. C# Lingua di scripting
- 27. Lingua layout tastiera Android
- 28. Lingua assembly - Stack machine
- 29. Yii2 - Multi lingua
- 30. Come cambiare la lingua dell'app quando l'utente seleziona la lingua?
Che cosa si intende per 'ifs'? Una lingua potrebbe non avere un operatore 'if' esplicito, ma ogni lingua deve avere * un * modo * di diramazione da un pezzo di codice ad altri due pezzi di codice, altrimenti ogni input di un programma darebbe sempre lo stesso risultato. –
La mia risposta ha fornito ciò che stavi cercando? In tal caso, contrassegnarlo come risposta alla domanda – Coops
Vedere anche [can-you-write-any-algorithm-without-an-if-statement] (http://stackoverflow.com/questions/1937362/can-you- write-any-algorithm-without-an-if-statement) – nawfal