如何利用上下文來控制符號的語義

經(jīng)過這一段時間對概念文字勃教,遞歸函數(shù),lambda演算和組合子邏輯的研究脐嫂,我發(fā)現(xiàn)了一種新的表示方法统刮,這種表示法紊遵,可以通過生成上下文,來控制符號的含義侥蒙,這個基本的思想可以追溯到哲學(xué)對于概念的思考暗膜,我們的文字和自然語言,都具有上下文鞭衩,用一個符號指代在上文中出現(xiàn)的概念学搜,那么這個符號本身就是上下文相關(guān)的,在編程語言中论衍,因為符號無法被重用恒水,會導(dǎo)致沖突,但是饲齐,我注意到有一些編程語言,比如著名的APL和J語言咧最,具有上下文捂人,它使用了隱式符號,來避免了這種沖突矢沿,但是我在研究smalltalk的時候滥搭,也發(fā)現(xiàn)它具有生成新對象的語義,這個新的對象捣鲸,不就是一個語義嘛瑟匆,當我想到這里的時候,頓時覺得栽惶,用函數(shù)生成具有新的上下文的函數(shù)愁溜,不就是一個新的對象,一個新的概念外厂,而且我們可以使用范疇來控制它的語義冕象,也就是集合的運算,來指定符號的范圍汁蝶,這樣可以大大減少新符號的使用渐扮,而且,我們的語義更加精確掖棉,因為集合的明確抽象墓律,可以避免模糊的語義,一切函數(shù)都可以進行集合推斷幔亥,從而判斷它的類型耻讽,這不就是最基本的邏輯推理嗎?要么定義范圍紫谷,要么定義內(nèi)涵齐饮。而且可以運用某些測試函數(shù)來自動推理范圍捐寥,這個我還在研究當中。下面給出一個人類推理的過程祖驱。

一類物體的大量現(xiàn)象 => 一般的類 => 根據(jù)某些性質(zhì)判斷類型 => 得出普遍的性質(zhì)握恳。

《九章算術(shù)》也寫道:“事有相推,各有攸歸捺僻,故枝條雖分而本干知乡洼,發(fā)其一端而已”。

這里面涉及到充分條件匕坯,必要條件的確定束昵,我們就不細說了,但是這個過程無疑是對的葛峻。
我們的編程語言具有這樣的能力锹雏,首先,我們可以生成新的上下文术奖。
1+ 1 = 2
1 + 1 = 1+ 1 = 2
//注意礁遵,這里的1 + 1后面兩個字符表示“加1”,“1”這個概念和“+”這個概念生成了“加1”這個概念采记。
這樣無限地遞歸下去佣耐。
true 1 2 = 1
false 1 2 = true 2 = 2
首先我們的true把第一個元素拿出來,false先生成一個true唧龄,然后直接取出來兼砖。
其他的具體就不描述了,下面直接上代碼既棺。

(define (array x)
  (define (gen-compare x c n)
    (if (null? x) '()
    (if (c (car x) n)
        (cons (car x) (gen-compare (cdr x) c n))
        (gen-compare (cdr x) c n))))
  (define (gen-add x add n res)
    (if (null? x)
    (if (null? n) (array (reverse res))
        (gen-add x add (cdr n) (cons (car n) res)))
    (gen-add (cdr x) add n (cons (car x) res))))
  (define (qst arr)
    (if (arr = null?) null-arr
    ((qst ((arr cdr) <= (arr car))) +
     ((array (list (arr car))) +
      (qst ((arr cdr) > (arr car)))))))
  
  (lambda (f . n)
    (cond
     ((compare > f) (array (gen-compare x f (car n))))
     ((eq? f +) (gen-add x + ((car n) =) '()))
     ((eq? f car) (car x))
     ((eq? f cdr) (array (cdr x)))
     ((eq? f sort) (qst (array x)))
     ((eq? f =)
      (if (null? n)
      x
      (if (eq? (car n) null?)
          (null? x))))
    (else 'err))))
(define c (array '(1 3 5 7 9)))
(define d (array '(2 4 6 8 10)))
(define f (array '(1 7 8 2 4)))
((c > 2) =)
((c + d) =)
((c + (d + (d + c))) =)
(define null-arr (array '()))

(c = null?)
((f sort) =)
(null-arr =)
(null-arr = null?)


(define (set x)
  (define (belong-to? x n)
    (if (null? x) #f
    (if (eq? (if (procedure? n) (eval (car x) user-initial-environment) (car x)) n) #t
        (belong-to? (cdr x) n))))
  (define (add-set all self n res)
    (if (null? (self =))
    (if (null? (n =)) (set (((array res) sort) =))
        (add-set all self (n cdr)
             (if (all < (n car)) (cons (n car) res) res) ))
    (add-set all (self cdr) n (cons (self car) res))))
  (define (include? self n)
    (if (null? (n =)) #t 
    (if (self < (n car)) #f
        (include? self (n cdr)))))
  (define self
    (lambda (f . n)
      (cond
       ((eq? f +) (add-set self self (car n) '()))
       ((eq? f >) (belong-to? x (car n)))
       ((eq? f <) (not (belong-to? x (car n))))
       ((eq? f >=) (include? self (car n)))
       ((eq? f <=) (not (include? self (car n))))
       ((eq? f =) x)
       ((eq? f car) (car x))
       ((eq? f cdr) (set (cdr x) ))
       (else 'err))))
  self)
(define a (set '(1 2 3)))

(a >= (set '(1 4)))

((a + (set '(2 3 4))) =)

(((set '(1 2 3 6 9 10)) + (set '(2 5 10 13 27))) =)

(a > 1)
(a < 4)
(define compare (set '(> < <= >=)))
(compare > <=)

這里分別定義了兩個類讽挟,一個是array類,一個是set類丸冕,它們雖然具有很多完全相同的符號戏挡,但是因為函數(shù)生成了新的語義,也就是新的函數(shù)和上下文晨仑,所以它們根本不會沖突褐墅,這樣的編寫方式非常優(yōu)雅。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末洪己,一起剝皮案震驚了整個濱河市妥凳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌答捕,老刑警劉巖逝钥,帶你破解...
    沈念sama閱讀 212,657評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拱镐,居然都是意外死亡艘款,警方通過查閱死者的電腦和手機持际,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,662評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哗咆,“玉大人蜘欲,你說我怎么就攤上這事∩渭恚” “怎么了姥份?”我有些...
    開封第一講書人閱讀 158,143評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長年碘。 經(jīng)常有香客問我澈歉,道長,這世上最難降的妖魔是什么屿衅? 我笑而不...
    開封第一講書人閱讀 56,732評論 1 284
  • 正文 為了忘掉前任埃难,我火速辦了婚禮,結(jié)果婚禮上涤久,老公的妹妹穿的比我還像新娘凯砍。我一直安慰自己,他們只是感情好拴竹,可當我...
    茶點故事閱讀 65,837評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著剧罩,像睡著了一般栓拜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惠昔,一...
    開封第一講書人閱讀 50,036評論 1 291
  • 那天幕与,我揣著相機與錄音,去河邊找鬼镇防。 笑死啦鸣,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的来氧。 我是一名探鬼主播诫给,決...
    沈念sama閱讀 39,126評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼啦扬!你這毒婦竟也來了中狂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,868評論 0 268
  • 序言:老撾萬榮一對情侶失蹤扑毡,失蹤者是張志新(化名)和其女友劉穎胃榕,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瞄摊,經(jīng)...
    沈念sama閱讀 44,315評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡勋又,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,641評論 2 327
  • 正文 我和宋清朗相戀三年苦掘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片楔壤。...
    茶點故事閱讀 38,773評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡鹤啡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出挺邀,到底是詐尸還是另有隱情揉忘,我是刑警寧澤,帶...
    沈念sama閱讀 34,470評論 4 333
  • 正文 年R本政府宣布端铛,位于F島的核電站泣矛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏禾蚕。R本人自食惡果不足惜您朽,卻給世界環(huán)境...
    茶點故事閱讀 40,126評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望换淆。 院中可真熱鬧哗总,春花似錦、人聲如沸倍试。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,859評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽县习。三九已至涮母,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間躁愿,已是汗流浹背叛本。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留彤钟,地道東北人来候。 一個月前我還...
    沈念sama閱讀 46,584評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像逸雹,于是被迫代替她去往敵國和親营搅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,676評論 2 351

推薦閱讀更多精彩內(nèi)容