Это естественно, но зависит от языка
Ваш подход действительно может показаться более естественным, но это действительно зависит от языка, который вы используете для реализации.
Обоснование беспорядка
C является язык системного программирования и довольно близок к аппаратному обеспечению (хотя забавно, поскольку мы привыкли рассматривать язык" высокого уровня ", а не писать машинный код), он не совсем выразительный.
Современные языки высокого уровня (опять же, спорно, шепелявость не такая современная, исторически говоря, но позволит вам делать это красиво) позволяет делать такие вещи, используя встроенные конструкции или поддержку библиотеки (например, с использованием диапазонов, кортежей или эквивалентов в таких языках, как Python, Ruby, Groovy, ML-языки, Haskell ...).
Возможные решения
Опция 1
Один из вариантов для вас - реализовать функцию или подпрограмму, которая принимает массив значений и проверяет их.
Вот базовый прототип, и я оставляю вам его реализацию в качестве упражнения:
/* returns non-zero value if check is in values */
int is_in(int check, int *values, int size);
Однако, как вы быстро увидите, это очень простой и не очень гибкий:
- работает только с целыми числами,
- он работает только для сравнения одинаковых значений.
Вариант 2
На ступеньку выше по лестнице сложности (с точки зрения языков) альтернативой было бы использование препроцессора макросы в C (или C ++), чтобы добиться аналогичного поведения, но остерегайтесь побочных эффектов.
Другие варианты
Следующим шагом может быть передача указателя функции в качестве дополнительного параметра для определения поведения при вызове - point, определите для этого несколько вариантов и псевдонимов и создайте себе небольшую библиотеку компараторов.
Следующим шагом будет реализация аналогичной вещи в C ++ с использованием шаблоны, чтобы сделать это для разных типов с помощью одной реализации.
А затем продолжайте переходить к языкам более высокого уровня.
Выберите правильный язык (или научитесь отпускать!)
Как правило, языки, предпочитающие функциональное программирование, по очевидным причинам имеют встроенную поддержку такого рода вещей. .
Или просто научитесь принимать тот факт, что одни языки могут делать то, чего не могут делать другие, и что в зависимости от работы и среды все так и есть. В основном это синтаксический сахар, и вы мало что можете сделать. Кроме того, некоторые языки со временем исправят свои недостатки, обновив свои спецификации, в то время как другие просто остановятся.
Возможно, библиотека уже реализует такую вещь, о которой я не знаю.
person
haylem
schedule
06.10.2010