2015-06-21 3 views
2

Итак, это мое второе консольное приложение F #. код выглядит следующим образом:F # «Значение конструктора ... не определено»

let rec fact n = 


if n = 1 then 1.0 
    else float(n)*fact(n-1);; 

let rec pow x n = 
    if n = 1 then x 
    else float(x) * pow x (n-1);; 

let rec func1 eps x n = 
    let f = fact (2 * n) * (fun n -> pow x n/float(n)) (2*n+1)/(pow 4.0 n * pow (fact n) 2) 
    if abs f < eps then f 
    else f + func1 eps x (n+1);; 

let quarter = func1 1.0e-2 1.0 2;; 

Когда я пытаюсь запустить let quarter = func1 1.0e-2 1.0 2;;, интерактивная консоль говорит error FS0039: The value or constructor 'func1' is not defined. Что пошло не так, или что недостает моему коду? Спасибо заранее.

+0

Вероятно, 'func1' еще не оценен. Попробуйте переоценить все значения с самого начала. – Petr

+0

@ Petr извините, как я оцениваю или переоцениваю здесь? Английский не мой первый язык. – 5up9n00b13

+0

Этот код - это работа: https://dotnetfiddle.net/pcSkWH –

ответ

9

Когда вы используете F # interactive, вам сначала нужно оценить код, который определяет функции, которые вы хотите использовать. Итак, если вы выберете только последнюю строку своего скрипта, вы получите сообщение об ошибке. Я полагаю, вы используете Alt + Enter, чтобы отправить код на F # Interactive - если вы копировали код и ввести его вручную, вы увидите что-то вроде этого:

Microsoft (R) F# Interactive version 12.0.30815.0 
Copyright (c) Microsoft Corporation. All Rights Reserved. 

For help type #help;; 

> let quarter = func1 1.0e-2 1.0 2;; 

    let quarter = func1 1.0e-2 1.0 2;; 
    ---------------^^^^^ 

stdin(1,16): error FS0039: The value or constructor 'func1' is not defined 

Чтобы исправить положение, необходимо выбрать все в вашем файле (кроме последней строки) и нажмите Alt + Enter. Тогда вы должны увидеть что-то вроде:

>  
val fact : n:int -> float 

> 
val pow : x:float -> n:int -> float 

> 
val func1 : eps:float -> x:float -> n:int -> float 

Это говорит о том, что F # Interactive обрабатывается функция определений fact, pow и func1, и теперь вы можете использовать их в других выражениях, что вы оценка:

> let quarter = func1 1.0e-2 1.0 2;; 
val quarter : float = 0.2250279793 
Смежные вопросы