Неверное сопоставление шаблонов для простого перебора списка в ghci [duplicate]

Вот некоторые подходы к работе с асинхронными запросами:
  1. Объект обезьяны браузера
  2. Q - A
  3. A + Promises.js
  4. jQuery отложен
  5. API XMLHttpRequest
  6. Использование концепции обратного вызова - как реализация в первом ответе

Пример: jQuery отложенная реализация для работы с несколькими запросами

var App = App || {};

App = {
    getDataFromServer: function(){

      var self = this,
                 deferred = $.Deferred(),
                 requests = [];

      requests.push($.getJSON('request/ajax/url/1'));
      requests.push($.getJSON('request/ajax/url/2'));

      $.when.apply(jQuery, requests).done(function(xhrResponse) {
        return deferred.resolve(xhrResponse.result);
      });
      return deferred;
    },

    init: function(){

        this.getDataFromServer().done(_.bind(function(resp1, resp2) {

           // Do the operations which you wanted to do when you
           // get a response from Ajax, for example, log response.
        }, this));
    }
};
App.init();
8
задан Will Ness 26 September 2014 в 17:12
поделиться

2 ответа

Код, который вы разместили в теле вопроса , выполняет исчерпывающее сопоставление шаблонов. Однако, если вы попытаетесь ввести это определение в ghci, вы должны использовать инструкцию single let:

Prelude> let test [] = [] ; test (x:xs) = test xs

Что вы делаете здесь неверно. Вы сначала определяете неисчерновую функцию test:

Prelude> let test [] = []

И затем вы определяете другую неисчерновую функцию, также называемую test, которая скрывает первый:

Prelude> let test (x:xs) = test xs
26
ответ дан Cœur 6 September 2018 в 00:38
поделиться

Это действительно очень сложная задача по тестированию детских программ в REPL (GHCi) Haskell.

Использование let не очень очевидно (особенно, поскольку оно не требуется в отдельном 'script / program').

И иногда мы НЕ хотим создавать полноценный файл, а вместо этого экспериментируем с небольшой функцией с разными «случаями».

Еще один полезный подход заключается в использовании разделителей :{ & amp; :}, чтобы определить степень нашей функции.

Скажем, мы хотим попробовать простую рекурсивную функцию sum, которая может содержать список чисел. Мы тогда сказали бы следующее:

λ > :{
Prelude| sum [] = 0
Prelude| sum (x:xs) = x + sum xs
Prelude| :}
sum :: Num t => [t] -> t
Prelude
λ > sum [1..10]
55
it :: (Enum t, Num t) => t

Обратите внимание, как приятно видеть, насколько мы можем теперь видеть нашу функцию!

Надеюсь, это поможет. Ура!

4
ответ дан fritz 6 September 2018 в 00:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: