2016-01-14 46 views
2

我剛開始學習clojure,因爲它屬於一類函數式編程,作爲第一步,我正在弄清楚它與命令式編程有何不同。所以我從維基百科和其他來源學到了一些原始知識。所以我很困惑這條線說函數式編程中的數學函數

函數式編程中有命令式編程和數學函數的功能。這裏的數學函數究竟意味着什麼?它是怎樣的與功能不同。

考慮一個數學函數f(x)= X^2 + X + 1 在對象oreiented編程方面我們寫出它接受一個參數x和返回計算value.I相信同樣是與殼體的函數那麼這是什麼意思

Treats computation as the evaluation of mathematical functions 
and avoids changing-state and mutable data. 

感謝您的幫助!

回答

3

通過數學函數,它指的是一個函數,當用相同的輸入調用時總是返回相同的值。以下,例如,是不是一個數學函數:

a = 0 
def f(x): 
    a += 1 
    return x + a 

因爲,當然,如果你用相同的x調用它多次,你會得到不同的值。發生這種情況是因爲f增量爲a,這就是所謂的副作用,這是函數式編程中應該避免的。

1

這是一個非常寬泛的問題。你可能想在讀了起來:

在這種情況下,這裏的「數學函數」是指「不引起副作用」的屬性如打印到顯示器,更改變量或通過網絡發送數據包。 OO語言中的函數通常會修改狀態(它們會更改相應對象實例的值),而在函數式語言中它們不會。

的數學函數的一個例子(fullfills引用透明,例如給定相同的輸入,則返回相同的輸出):

def square(x): 
    return x * x 

的兩個非數學函數(__init__increment)的一個例子。這些仍然是功能,但它們正在「改變」變量current_count):

class Counter: 
    def __init__(self): 
     self.current_count = 0 

    def increment(): 
     self.current_count += 1