Wyzwanie: Zdefiniuj xw taki sposób, aby wyrażenie (x == x+2)miało wartość true.
Oznacziłem pytanie jako C, ale odpowiedzi w innych językach są mile widziane, o ile są kreatywne lub podkreślają interesujący aspekt języka.
Mam zamiar zaakceptować rozwiązanie typu C, ale inne języki mogą uzyskać mój głos.
- Prawidłowo - działa na implementacjach zgodnych ze standardami. Wyjątek - przyjęcie implementacji podstawowych typów, jeśli jest to powszechna implementacja (np. Założenie, że
intjest to uzupełnienie 32-bitowe 2) jest OK. - Prosty - powinien być mały, używaj podstawowych funkcji językowych.
- Ciekawe - przyznaję, subiektywne. Mam kilka przykładów tego, co uważam za interesujące, ale nie chcę udzielać wskazówek. Aktualizacja : Unikanie preprocesora jest interesujące.
- Szybko - pierwsza dobra odpowiedź zostanie zaakceptowana.
Po uzyskaniu 60 odpowiedzi (nigdy nie spodziewałem się takiego oskarżenia), może warto je streścić.
60 odpowiedzi dzieli się na 7 grup, z których 3 można zaimplementować w języku C, pozostałe w innych językach:
- Preprocesor C.
#define x 2|0zasugerowano, ale istnieje wiele innych możliwości. - Zmiennoprzecinkowy. Duże liczby, nieskończoność
lub NaNdziałają wszystkie. Wskaźnik arytmetyczny. Wskaźnik do ogromnej struktury powoduje dodanie 2 w celu zawinięcia.
Reszta nie działa z C:
- Przeciążenie operatora - A
+nie dodaje się lub==zawsze zwraca true. - Wykonywanie
xpołączenia funkcji (niektóre języki pozwoli go bezx()składni). Następnie za każdym razem może zwrócić coś innego. - Jednobitowy typ danych. Potem
x == x+2 (mod 2). - Zmiana
2- jakiś język pozwala ci to przypisać0.
add to Setstandardową bibliotekę, bez redefiniowania +siebie, nie pasuje do tych 7 kategorii, IMHO.
4. Quick? Masz na myśli „Ktokolwiek zna i ma szczęście, by najpierw przeczytać to pytanie”?