F# действительно лучше, чем C# для математики?

Используйте .modal('show') , чтобы отобразить модель вручную

$(document).ready(function() {
  $('#myModal').modal('show');
});



Modal Example

30
задан Dmitri Nesteruk 18 December 2008 в 23:39
поделиться

7 ответов

Я думаю, что большинство важных моментов было уже упомянуто кем-то еще:

  1. F# позволяет Вам решить проблемы способом, математики думают о них
  2. Благодаря функциям высшего порядка, можно использовать более простые понятия для решения трудных проблем
  3. , Все неизменно по умолчанию, который делает программу легче понять (и также легче параллелизировать)

, Это определенно верно, что можно использовать некоторые понятия F# в C# 3.0, но существуют ограничения. Вы не можете использовать рекурсивные вычисления (потому что C# не имеет хвостовой рекурсии), и это - то, как Вы пишете примитивные вычисления функциональным/математическим способом. Кроме того, запись сложных функций высшего порядка (которые берут другие функции в качестве аргументов) в C# является трудной, потому что необходимо записать типы явно (в то время как в F#, типы выведены, но также и автоматически обобщены, таким образом, Вы не должны явно делать функциональный дженерик).

кроме того, я думаю, что следующий момент от Marc Gravell не является допустимым возражением:

От угла обслуживания, я имею представление, которое соответственно назвало свойства, и т.д. легче использовать (за целый жизненный цикл), чем кортежи и списки головы/хвоста, но это могло бы просто быть я.

Это, конечно, верно. Однако большая вещь о F# состоит в том, что можно начать писать программу с помощью кортежей & возглавьте/выследите списки, и позже в процессе разработки превращают его в программу, которая использует.NET IEnumerables и вводит со свойствами (и это - то, как я верю типичным работам программиста F#*). Кортежи и т.д. и интерактивные средства разработки F# дают Вам отличный способ быстро моделировать решения (и при выполнении чего-то математического, это важно, потому что большая часть разработки просто экспериментирует при поиске лучшего решения). Как только у Вас есть прототип, можно использовать простые преобразования исходного кода для обертывания кода в типе F# (который может также использоваться от C# в качестве обычного класса). F# также дает Вам много способов оптимизировать код позже с точки зрения производительности.

Это приносит Вам пользу простых в использовании языков (например, Python), который многие люди используют для разработки прототипа фазы. Однако Вы не должны переписывать целую программу позже, как только Вы сделаны с разработкой прототипа использования эффективного языка (например, C++ или возможно C#), потому что F# и "прост в использовании" и "эффективен", и можно бегло переключиться между этими двумя стилями.

(*) я также использую этот стиль в моем книга .

функционального программирования
32
ответ дан Tomas Petricek 11 October 2019 в 13:08
поделиться

Поддержки F# единицы измерения , который может быть очень полезен для математической работы.

13
ответ дан Craig Stuntz 11 October 2019 в 13:08
поделиться

Я не уверен если его лучше или хуже, но существует, конечно, различие в подходе. Статические языки определяют, как будет решена проблема. Функциональные языки как F# или Haskell не делают этого и более адаптируются в том, как математик решил бы конкретную проблему. Тогда у Вас есть книги как этот что Python спекулянта для обладания способностью к нему. Если Вы говорите с точки зрения производительности, ничто не может разбить C. Если Вы говорите из библиотек, я верю Функциональному Langauges (F# и подобные), Fortan (да не мертвый все же), Python имеет превосходные библиотеки для математики.

1
ответ дан Perpetualcoder 11 October 2019 в 13:08
поделиться

Это сообщение похоже на него, могло бы быть релевантным: http://fsharpnews.blogspot.com/2007/05/ffts-again.html

Также: C# / Сравнение производительности F#

самое большое преимущество для чистой математики - то, что заявил PerpetualCoder, F# больше походит на математическую проблему, таким образом, для математика будет легче записать. Это напомнило мне много MATLAB, когда я посмотрел на него.

4
ответ дан Community 11 October 2019 в 13:08
поделиться

Одним из больших преимуществ функциональных языков является факт они, они могут работать на многопроцессорных или многоядерных системах, параллельно не требуя, чтобы Вы изменили любой код. Это означает, что можно ускорить алгоритмы путем простого добавления ядер.

0
ответ дан DanJ 11 October 2019 в 13:08
поделиться

Я происхождения математики и посмотрел на F#, но я все еще предпочитаю C# в большинстве целей. Существует несколько вещей, которые F# делает легче, но в целом я все еще предпочитаю C# большим полем.

Некоторые рекламируемые преимущества F# (неизменность, функции высшего порядка, и т.д.) могут все еще быть сделаны в C# (использующий делегатов и т.д. к последнему). Это еще более очевидно при использовании C# 3.0 с поддержкой лямбды, которая делает его очень легким и выразительным для объявления функционального кода.

От угла обслуживания, я имею представление, которое соответственно назвало свойства, и т.д. легче использовать (за целый жизненный цикл), чем кортежи и списки головы/хвоста, но это могло бы просто быть я.

Одна из областей, где C# подводит себя для математики, находится в дженериках и их поддержке операторов. Таким образом, я провожу некоторое время, обращаясь к этому;-p Мои результаты доступны в MiscUtil с обзором здесь .

7
ответ дан Marc Gravell 11 October 2019 в 13:08
поделиться

F # имеет множество огромных преимуществ перед C # в контексте математических программ:

  • Интерактивные сеансы F # позволяют запускать код на лету для получения результатов немедленно и даже визуализировать их , без необходимости создавать и выполнять полное приложение.

  • F # поддерживает некоторые функции, которые могут значительно повысить производительность в контексте математики. В частности, сочетание встроенных и функций высшего порядка позволяет элегантно разложить математический код на множители без отрицательного влияния на производительность. C # не может этого выразить.

  • F # поддерживает некоторые функции, которые позволяют реализовать математические концепции гораздо более естественно, чем это может быть получено в C #. Например, хвостовые вызовы значительно упрощают и надежно реализуют рекуррентные отношения. C # тоже не может выразить это.

  • Математические задачи часто требуют использования более сложных структур данных и алгоритмов.С F # выражать сложные решения намного проще, чем с C #.

Если вам нужен пример, я преобразовал реализацию QR-разложения в System.Double из 2kLOC в C #. F # состоял всего из 100 строк кода, работает более чем в 10 раз быстрее и обобщен по типу чисел, поэтому он работает не только с float32 , float и System.Numerics .Complex , но может применяться даже к символьным матрицам для получения символьных результатов!

FWIW, я пишу книги на эту тему, а также коммерческое программное обеспечение.

18
ответ дан 27 November 2019 в 23:26
поделиться
Другие вопросы по тегам:

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