функция игнорирования в OCaml

на странице 95 книги, озаглавленной «Разработка приложений с объективным caml

let imap f l =  
let l_res = icreate ()  
in while not (iempty l) do  
     ignore (icons (f (ihd l)) l_res) ;  
     ignore (itl l)
   done ;
   { l_res with c = List.rev l_res.c } ;;

] Что делает функция ignore в приведенном выше коде? Я смог получить тот же результат без функции игнорирования, реализованной в цикл while выглядит следующим образом:

let imap f l =  
let l_res = icreate ()  
in while not (iempty l) do  
     (icons (f (ihd l)) l_res) ;  
     (itl l)
   done ;
   { l_res with c = List.rev l_res.c } ;;

Затем в книге говорится, что наличие ignore подчеркивает тот факт, что здесь учитывается не результат функций, а их побочные эффекты на их аргумент.

результат функций не считается, тогда как цикл while останавливается? В этом случае мне кажется, что цикл while будет непрерывно повторяться, если результат (itl l) игнорируется. Кроме того, о каких побочных эффектах их аргументов говорится в книге? Спасибо

7
задан Gilles 'SO- stop being evil' 22 December 2010 в 21:46
поделиться