Haskell - ленивый язык. Он не оценивает результаты, пока они не «нужны».
Теперь, только печать значение заставляет все это «нужно». Другими словами, если вы наберете выражение в GHCi, он попытается распечатать результат, который заставит все это оценивать. Обычно это то, что вы хотите.
Команда sprint
(которая является функцией GHCi, а не частью языка Haskell) позволяет вам узнать, сколько из этого значения было оценено на данный момент.
Например:
Prelude> let xs = [1..]
Prelude> :sprint xs
xs = _
Итак, мы только что объявили xs
, и в настоящее время он не оценен. Теперь давайте напечатаем первый элемент:
Prelude> head xs
1
Prelude> :sprint xs
xs = 1 : _
Теперь GHCi оценил головку списка, но не более того.
Prelude> take 10 xs
[1,2,3,4,5,6,7,8,9,10]
Prelude> :sprint xs
xs = 1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 : 9 : 10 : _
Теперь оцениваются первые 10 элементов, но больше остается. (Так как xs
является бесконечным списком , это неудивительно.)
Вы можете построить другие выражения и оценить их понемногу, чтобы посмотреть, что происходит. Это действительно часть отладчика GHCi, который позволяет вам проходить свой код по одному бит за раз. Особенно, если ваш код попадает в бесконечный цикл, вы не хотите, чтобы print
ничего, потому что это может заблокировать GHCi. Но вы все еще хотите посмотреть, что происходит ... следовательно sprint
, что позволяет вам видеть, что оценивалось до сих пор.
Jython и IronPython предоставляют доступ к большому Java и библиотекам SOAP.NET.
При необходимости в CPython ZSI был облуплен для меня, но могло бы быть возможно использовать инструмент как Robin для обертывания хорошей библиотеки SOAP C++, такой как gSOAP или Ось Apache C++
Если я должен выставить API, я предпочитаю делать его как JSON. Python имеет превосходную поддержку объектов JSON (Объекты JSON, заражают словари Python),