2010-07-01 1 views
2

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

Я работает в Vista.

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

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

здесь ошибка:

The value, constructor, namespace or type 'fold_left' is not defined (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 

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

The type 'int -> int' does not match the type 'int' (FS0001) - The type ''a -> int' does not match the type 'int' (FS0001) -

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

ответ

9

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

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

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

+0

Так что это поднимает то, о чем я думал на днях. Есть ли правильная складка в стандартной библиотеке? –

+1

@Nels - Да, это называется 'List.foldBack'. – kvb

+3

И вы можете найти его, посмотрев документы, которые я связал в своем ответе. Документы библиотеки - достойная ссылка - смотрите! – Brian

4

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

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

Смотри, например,

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

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

Кроме того, вы можете удалить «#light» в верхней части, он не нужен.

+0

Большое спасибо за ссылки, а также отзыв о том, что вам не нужен #light. Это довольно сложно без Intellisense, половина времени, когда я не знаю, правильно ли я синтаксис. – Darknight

+0

ненавижу утверждать очевидное, но вместо этого используйте Visual Studio. вы получаете базовый intellisense там –

 Смежные вопросы

  • Нет связанных вопросов^_^