Подходим к этому сегодня.
Я написал код, который выглядит так:
app.controller('ctrlr', function($scope, $http){
$http.get('localhost:3000').success(function(data) {
$scope.stuff = data;
});
});
... но он должен был выглядеть так:
app.controller('ctrlr', function($scope, $http){
$http.get('http://localhost:3000').success(function(data) {
$scope.stuff = data;
});
});
Единственное различие заключалось в отсутствии http://
во втором фрагменте кода.
Просто хотелось поместить это там, если есть другие, имеющие аналогичную проблему.
То, что вы делаете, прекрасно, особенно учитывая, что размер вашей матрицы постоянный и никогда не меняется. SMTLib не имеет понятия циклов, хотя последние версии позволяют рекурсивные определения функций, которые могут быть использованы для этого эффекта. См. Этот ответ для другого, но связанного с этим вопроса о том, как использовать рекурсию: https://stackoverflow.com/a/51140049/936310 . Тем не менее, я бы рекомендовал придерживаться вашего текущего кода для простоты и более широкой поддержки от множества решателей.
На мой взгляд, SMTLib действительно должен быть «сгенерирован» вместо прямого использования; и большинство инструментов используют его таким образом. Если вам нужно усложнить программирование, я бы рекомендовал вместо этого использовать интерфейс более высокого уровня. Есть интерфейсы для Z3 и других решателей практически на любом языке, который вы можете себе представить. Python и Haskell обеспечивают действительно высокоуровневые привязки, которые избавляются от большей части шаблона для вас. У вас также есть привязки низкого уровня от C / C ++ / Java, если это ваш выбор. См. с использованием арифметики с плавающей точкой с API-интерфейсами Z3 C ++ для сравнения стилей.