日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

J语言初步,绝妙的符号系统,神的计算器

發(fā)布時間:2024/1/8 windows 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 J语言初步,绝妙的符号系统,神的计算器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 簡介
    • 算術符號和優(yōu)先級
    • 賦值和比較
    • 復合動詞
    • 動詞列表
    • 理解階乘!!

簡介

J語言更像是一個大型符號系統(tǒng),用以解決復雜的數(shù)學運算。所以在下載J語言之后,進入jconsole,就可以憑借感覺進行數(shù)學運算了。

其中加減乘除分別是+, -, *, %。但是玩過這么多編程語言,對這些常規(guī)的運算其實已經有些倦怠了,所以直接來個鬼酷一點的,事先說明,J語言中NB.后為注釋。

1 2 3 4 5 * 2 NB. 數(shù)乘列表 2 4 6 8 108 <: 7 8 9 NB. 數(shù)值和列表比較 0 1 17 8 9 < 9 8 7 NB. 列表和列表比較 1 0 0(+/ % #) 2.5 3.1 11 2 NB. 求均值 4.65fact=: 1: ` (* $:@<:) @. * NB. 此為階乘fact 5 NB. 計算5的階乘 120

前三條很容易理解,就不解釋了;第五條稍微有點難,也先不解釋。這里先看看求均值的代碼(+/ % #),其中%是個二元運算符——除法,這個除法作用在兩個符號之間,其中+/用于數(shù)列求和,#則返回數(shù)列長度,二者相除就得到均值。

這個就是J語言符號運算的魅力,而且J語言提供了Android等版本,可以在手機上使用,下載地址:Android版本;IOS版本,在手機上的效果為

接下來,為了理解階乘代碼,先做一點最基礎的J語言符號訓練,主要包括三個內容,一是基礎的運算符號;二是與if相關的語句;三是復合語句的概念。

算術符號和優(yōu)先級

初學J語言,可以把運算符分為兩類,即一元運算符和二元運算符,有的時候,同一個符號在進行一元或者二元運算的時候,會有不同的含義,例如%作為二元運算,表示除法,作為一元運算,表示求倒數(shù)

% 5 0.23 % 5 0.6

下表中列出了常見的算術符號

+-*%^%:
一元負號正號取符號倒數(shù)e指數(shù)根號
二元乘方猜猜是什么

其中-作為一元運算表示取負,而J語言中的復數(shù)用下劃線表示,即_1表示 ? 1 -1 ?1

和其他語言不同,J語言中乘法并不比加法優(yōu)先,如果想更改二元運算的順序,可以使用括號。而一般來說,一元運算比二元運算有著更高的優(yōu)先級。

2 * 3 + 4 NB. J語言中乘法并不比加法更優(yōu)先 14(2 * 3) + 4 NB. 但括號還是優(yōu)先的 102 * * -3 NB. * -3-3的符號,為-1 _2 NB. 然后2乘以負一得到-2

賦值和比較

在J語言中,通過=:進行變量賦值,而且作為函數(shù)式語言,=:不僅可以賦值變量,也可以賦值函數(shù)

a =: 5 NB.5賦值給aa 5b =: - NB. 把運算-賦值給bb a NB. 相當于 - a _5a b a NB. 相當于 a - a 0type 'b' ┌────┐ │verb│ └────┘type 'a' ┌────┐ │noun│ └────┘

type可以返回符號的類別,在其他語言中,我們一般把-稱作運算符,但在J語言中,則稱作動詞;而變量則為名詞。在J語言中,還有副詞、連詞等。

=:用于賦值,而其他語言中常用的=在J語言中則表示相等

符號含義符號含義
=判斷相等=:賦值
<小于<:小于等于
>大于>:大于等于

復合動詞

通過=:可以進行賦值,而且可以賦值為名詞,還可以賦值為動詞,例如<:和>:分別表示減1和加1,但容易記混,所以下面新建兩個函數(shù)表示

addOne =: >:minusOne =: <:addOne 10 11minusOne 10 9

這個本來沒什么,不過在多個動詞連接時卻出現(xiàn)了問題,比如想實現(xiàn)類似 1 x + 1 \frac{1}{x}+1 x1?+1的功能,如果x=5,那么就是下面這種

>: % 5 1.2

那么如果想做一個復合函數(shù),也理應是test =: >: %,但下面顯然是錯的

test =: >: %test 5 1

錯誤的原因也很離譜,test 5實際上執(zhí)行的是5 >: % 5,其中%被翻譯為單目運算符取倒數(shù);>:被翻譯為雙目運算符,用于比較,最后自然 5 > 1 5 5>\frac 1 5 5>51?為真,即返回1。

換言之,:> %在未指定輸入的情況下,是有歧義的。

為了避免這個尷尬的問題,通過@對動詞進行復合是個好辦法

test =: >: @ %test 2 1.5

其中,@就起到了函數(shù)復合的作用,相當于把函數(shù) f f f g g g,變?yōu)?span id="ozvdkddzhkzd" class="katex--inline"> f ( g ( x ) ) f(g(x)) f(g(x))

動詞列表

如果想用同一個動詞,處理多個不同的值,那么可以先用不同的值做一個列表。

% 2 3 4 0.5 0.333333 0.25

但是,若想用不同的動詞,處理同一個數(shù)值,那可能就不能這么直接列出來了,因為按照J的脾氣,肯定先復合了再說,想做一個動詞列表,那么需要用括號,然后中間用,或者`分隔,類似下面這種

(%, ^) 5 0.2 148.413

需要注意,中間的逗號如果沒有的話,那么最終的結果還是復合,只不過換了個復合的方法

% ^ 5 0.00673795(% ^) 5 0.0336897

上面執(zhí)行的計算是 1 e 5 \frac{1}{e^5} e51?,下面執(zhí)行的運算是 5 / e 5 5/e^5 5/e5,即()把其左側的運算符理解為了雙目計算,并將輸入的5分成兩份分別送到了表達式兩端。

(,)雖然能實現(xiàn)列表,但是這個列表也有一個問題,即無論何時都會一起使用。正常列表,比如[1,2,3],那講道理我把其中的2提取出來專門處理肯定也是沒問題的,但函數(shù)上面的函數(shù)列表好像不太行。

為了解決這個問題,J語言提供了`…@.語句。

由于`在Markdown中是負責高亮的,所以`自己就沒法高亮了……具體使用方法,直接看下面的代碼

test =: % ` ^(test@.0) 3 0.333333(test@.1) 3 20.0855

理解階乘!!

再有了上面這些代碼的積淀之后,只需在知道兩件事就可以看懂階乘的代碼了,這兩件事分別是J語言中的兩類特殊函數(shù)。

一類是1:函數(shù),表示常量函數(shù),1:的返回值永遠是1;相應地_3:返回值永遠是-3,這樣的函數(shù)共有19個,值從-9到9。

另一類則是創(chuàng)建遞歸函數(shù)必不可少的$:,表示調用自身。

接下來就回顧一下階乘代碼

fact=: 1: ` (* $:@<:) @. *

其中*用于返回符號,當輸入值x大于1時,* x=1,當輸入值x=0時,* x =0。

如果*x=0,那么fact就選擇左邊的1:函數(shù),此函數(shù)無論輸入什么,返回值都是1。

如果*x=1,那么就選擇右側的(* $:@<:),此函數(shù)最外層是(* ),將輸入的值 x x x變?yōu)閤 * ($:@<:);$:表示調用自身,:<減一,二者結合就成了f(x-1)。

至此,也就明白了階乘是怎么來的,同時也基本上算是上了J語言的船。

總結

以上是生活随笔為你收集整理的J语言初步,绝妙的符号系统,神的计算器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。