為什麼大多數程式語言被設計成函式只有乙個返回值,而不是多個?

時間 2021-06-17 02:45:33

1樓:卞舒言

多值返回其實很常見了,但很多時候也沒有什麼必要,你看scheme的主流實現都支援多值返回了,你見過幾個用到這個特性的scheme程式?因為本身在scheme裡表結構就已經過於強大。

不過話又說回來,去了解一下amb求值的想法吧。

2樓:劉強

因為函式只是處理乙個乙個問題的過程,其實我們只需要知道處理結果是否成功,或者處理完了,你想返回什麼是可以通過引數返回的。

3樓:「已登出」

取決於程式語言的設計,例如c函式的返回值只有乙個,PHP則可以有多個。

函式的返回值本質是將資料壓棧,重點是知道棧的大小,返回值的個數不重要。

之所以需要說明返回值的個數,是因為把他們的大小相加,便決定了棧的大小。

從這個意義上說,函式的返回值被設計成有1個或是有多個並沒有關係,返回2個int,就是返回乙個float,或者是返回乙個大小為sizeof(int) * 2的結構體。

而之所以不同的程式語言被設計成有不同個數的返回值,可能是出於歷史繼承或者程式設計風格的原因。(個人觀點,僅供參考。)

4樓:朱涵俊

很多支援多個返回值,lua就支援,現在js也支援了(es6)。

多個返回值,在彙編很常見,一般來說彙編函式,eax,ecx,edx這3個暫存器是不需要儲存的,其他暫存器在函式進入的時候push,返回的時候popup,c語言就是用eax來返回的,ecx,edx還能用來返回2個引數。就是說高階語言支援多個返回引數,如果返回引數在3個以內(99%),是可以在彙編這級優化的。如果是通過乙個類似c語言結構來返回多值,那就沒有啥意義。

5樓:

Common Lisp: values

這才是真正的多個返回值,一般來說只需要接收和處理第乙個(和其他函式用法一模一樣),有特殊需要可以另取後面的,而不用每次都用佔位符或者資料結構去妥協。

6樓:不知名鹿乃粉絲

1.返回多個值通常來說並不常用

2.大部分語言都可以返回乙個陣列或者乙個物件來實現返回多個值的效果

3.Python等語言提供直接返回多個值的功能

7樓:1angxi

首先,需求明明很小,卻會增加設計難度,增加學習成本。

其次,多個返回值可以組合成乙個物件一起返回,問題解決了。

再次,沒有物件如c可以通過引數指標傳遞一塊記憶體給函式讓函式放入結果,相當於預先定義了返回值的位置。

8樓:

個人理解,多返回值的函式一定可以通過多個單返回值的函式來實現。對於早起的語言設計者而言,這應該是乙個錦上添花而不是必須的功能,優先順序不高。

當然,後來的語言,很多已經實現了這個功能,因為畢竟不難

ps,說通過指標在引數裡傳遞的,可以退散了,不是乙個問題好吧。

9樓:

難不成是說明你的思維方式不正常?

在數學裡面,函式被嚴格定義為只有乙個輸出的東西。生活中的那東西叫做工廠,不叫函式。

當然,函式被設計為只有乙個返回值並一直延續至今被大多數語言採納,最主要的原因我覺得還是函式呼叫表示式就可以很自然的成為乙個表示式的來實現在乙個表示式中多個函式呼叫,而無需引入額外的變數和特別的語法。

10樓:張小賤

一般的,在乙個變化過程中,有兩個變數x、y,如果給定乙個x值,相應的就確定唯一(wei yi)的乙個y,那麼就稱y是x的函式。

11樓:Belleve

現代程式語言中「函式」概念多來自 ALGOL 和 Fortran

ALGOL 和 Fotrean 的概念借自數學

數學函式有多元之說,然而你見過幾個「多返回值」的?

12樓:

別說那些先進的語言了,C都可以實現多個返回值的功能。。。只要你多傳幾個引數進去(╯3╰)

void

calc

(floata,

floatb,

float

*jia

,float

*jian

,float

*cheng

,float

*chu

)你看,我有4個返回值。

13樓:畢勤

首先,樓主,這個問題不該有Python標籤,因為Python是可以返回多個值構成乙個元組的,這個元組你願意拆開用也可以,一起用也行。

另外,即使是最普通的C語言,你也可以通過返回乙個結構體的方式返回一堆資料,儲存在結構體裡就行了。

我覺得你似乎是想說為什麼函式只能有一次返回行為,不過,這個問題對python也是不成立的,python有yield。

14樓:

在c語言中,

返回多個值可以用乙個陣列或指標, 結構體;

返回0, -1是單純的返回函式的終止狀態; (0 成功, -1 失敗)

執行緒中返回錯誤碼

詳情見errno.h

15樓:

因為設計語言的時候,一般只定義基礎的/必需的,更複雜的需要程式設計師去演繹。

其他的語言我不知道,就C而言,如果需要返回不止乙個型別不同的值,我通常會把它們定義成乙個結構體,然後返回結構體變數或者結構體變數的指標。。。

16樓:Domi

從本質上說,因為圖靈機只有乙個返回值(或者說狀態)。有乙個返回值就能達到圖靈完備,為何需要兩個返回值?另外,多個返回值就需要多個暫存器,既浪費又不利於編譯器優化。

從我們的直覺來看,你得到的兩個返回值,它們一定能在某個層級上被抽象為乙個東西,這在程式中的表現就是返回抽象體的指標(或引用)

為什麼大多數程式語言中陣列的第乙個元素的索引不從 1 開始?

漁父 因為對模運算太不友好了,什麼事都得想著 1,Matlab 用的我想死,結果 Julia 還這麼設計。autoi k quarter auto result complex t 這個 C 怎麼翻譯成 Matlab Julia k 是個模 quarter 的週期變數,quarter i 是 qua...

CNC大多數都是用什麼軟體程式設計的?

zoroer2009 本人用的ug,因為編刀路只是最後一步,為了優化這最後一步,前面要做相應的準備工作,而這些是其它幾個熱門軟體很難做到的,就算能做相比較起來也很麻煩。 灌了這碗雞湯 UG加工較為複雜的三維曲面,工廠做產品造型的一般用UG,剛開始大學實習的時候去的一家公司做cnc工程師助理,面試的崗...

少兒程式設計為什麼大多數人都不看好?

Lemon 少兒程式設計在大多數家長眼裡,還是乙個興趣班,和學科教育相比較,不是最重要的科目,也不是當下小孩子公升學的必考科目。同時,在一些城市,家長了解程式設計的認知裡,學習程式設計就是當工程師,沒有看到科技發展的速度,也代表一些家長自己本身的教育脫節。另外,在下沉城市來看,少兒程式設計的概念根本...