F # под SharpDevelop - PullRequest
       25

F # под SharpDevelop

2 голосов
/ 01 июля 2010

Хорошо, это довольно неприятно, я установил последнюю версию SharpDevelop, а также установил компилятор F # (по ссылке с сайта SharpDevelops)

Я работаю в Vista.

до сих пор все работало нормально.

Но по какой-то причине он просто отказывается компилироваться, когда я пытаюсь использовать List.fold_left, однако List.fold, кажется, работает,

вот ошибка:

Значение, конструктор, пространство имен или тип 'fold_left' не определены (FS0039)

вот код:

#light
open System
let nums = [1..10]
let ans = List.fold_left (+) 0 nums
Console.WriteLine("answer: {0}", ans)
// Just to make it pause
let pause = Console.ReadLine()

дальнейшие проблемы в том, что я пытаюсь использовать сгиб, чтобы выровнять каждый элемент в списке, например:

1^2 + 2^2 + 3^2 ...

Я предположил, что Fold принимает функцию и список, поэтому я попытался сделать следующее:

let sq x = x*x
let ans = List.fold (sq) 0 nums

но это выдает мне следующую ошибку во второй строке:

Тип 'int -> int' не соответствует типу 'int' (FS0001) - Тип '' a -> int 'не соответствует типу' int '(FS0001) -

Пожалуйста, кто-нибудь может объяснить это?

Ответы [ 2 ]

9 голосов
/ 01 июля 2010

List.fold_left было старым именем для функции, которое теперь List.fold. Проблема, с которой вы столкнулись, состоит в том, что List.fold принимает два аргумента, первый из которых является функцией сворачивания списка, а второй - начальным начальным числом для рекурсии. Используемая вами функция должна принимать два аргумента, итоговую сумму и следующий элемент списка. Вы хотите использовать что-то вроде

List.fold (fun sum x -> sum + x * x) 0 [1..10]

Ошибка, которую вы получили, заключалась в том, что тип функции, которую вы пытались использовать, не принимал правильное количество аргументов.

4 голосов
/ 01 июля 2010

Кстати, справочные документы библиотеки здесь:

http://msdn.microsoft.com/en-us/library/ee353567.aspx

См., Например,

http://msdn.microsoft.com/en-us/library/ee353738.aspx

(Я забыл, как трудно развиваться без Intellisense.)

Также вы можете убрать "#light" сверху, он не нужен.

...