亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? backquote.el

?? 早期freebsd實現(xiàn)
?? EL
字號:
;; Copyright (C) 1985 Free Software Foundation, Inc.;; Written by Dick King (king@kestrel).;; This file is part of GNU Emacs.;; GNU Emacs is free software; you can redistribute it and/or modify;; it under the terms of the GNU General Public License as published by;; the Free Software Foundation; either version 1, or (at your option);; any later version.;; GNU Emacs is distributed in the hope that it will be useful,;; but WITHOUT ANY WARRANTY; without even the implied warranty of;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the;; GNU General Public License for more details.;; You should have received a copy of the GNU General Public License;; along with GNU Emacs; see the file COPYING.  If not, write to;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.;;; This is a rudimentry backquote package written by D. King, ;;; king@kestrel, on 8/31/85.  (` x) is a macro ;;; that expands to a form that produces x.  (` (a b ..)) is ;;; a macro that expands into a form that produces a list of what a b ;;; etc. would have produced.  Any element can be of the form ;;; (, <form>) in which case the resulting form evaluates ;;; <form> before putting it into place, or (,@ <form>), in which ;;; case the evaluation of <form> is arranged for and each element ;;; of the result (which must be a (possibly null) list) is inserted.;;; As an example, the immediately following macro push (v l) could ;;; have been written ;;;    (defmacro push (v l);;;         (` (setq (, l) (cons (,@ (list v l)))))) ;;; although;;;    (defmacro push (v l);;;         (` (setq (, l) (cons (, v) (, l))))) ;;; is far more natural.  The magic atoms , ;;; and ,@ are user-settable and list-valued.  We recommend that ;;; things never be removed from this list lest you break something ;;; someone else wrote in the dim past that comes to be recompiled in ;;; the distant future.;;; LIMITATIONS: tail consing is not handled correctly.  Do not say ;;; (` (a . (, b))) - say (` (a (,@ b))) ;;; which works even if b is not list-valued.;;; No attempt is made to handle vectors.  (` [a (, b) c]) doesn't work.;;; Sorry, you must say things like ;;; (` (a (,@ 'b))) to get (a . b) and  ;;; (` ((, ',) c)) to get (, c) - [(` (a , b)) will work but is a bad habit];;; I haven't taught it the joys of nconc.;;; (` atom) dies.  (` (, atom)) or anything else is okay.;;; BEWARE BEWARE BEWARE ;;; inclusion of (,atom) rather than (, atom) or (,@atom) rather than ;;; (,@ atom) will result in errors that will show up very late. ;;; This is so crunchy that I am considering including a check for ;;; this or changing the syntax to ... ,(<form>).  RMS: opinion?(provide 'backquote);;; a raft of general-purpose macros follows.  See the nearest ;;; Commonlisp manual.(defmacro bq-push (v l)  "Pushes evaluated first form onto second unevaluated objecta list-value atom"  (list 'setq l (list 'cons v l)))(defmacro bq-caar (l)  (list 'car (list 'car l)))(defmacro bq-cadr (l)  (list 'car (list 'cdr l)))(defmacro bq-cdar (l)  (list 'cdr (list 'car l)));;; These two advertised variables control what characters are used to ;;; unquote things.  I have included , and ,@ as the unquote and ;;; splice operators, respectively, to give users of MIT CADR machine ;;; derivitive machines a warm, cosy feeling.(defconst backquote-unquote '(,)  "*A list of all objects that stimulate unquoting in `.  Memq test.")(defconst backquote-splice '(,@)  "*A list of all objects that stimulate splicing in `.  Memq test.");;; This is the interface (defmacro ` (form)  "(` FORM) Expands to a form that will generate FORM.FORM is `almost quoted' -- see backquote.el for a description."  (bq-make-maker form));;; We develop the method for building the desired list from ;;; the end towards the beginning.  The contract is that there be a ;;; variable called state and a list called tailmaker, and that the form ;;; (cons state tailmaker) deliver the goods.  Exception - if the ;;; state is quote the tailmaker is the form itself.;;; This function takes a form and returns what I will call a maker in ;;; what follows.  Evaluating the maker would produce the form, ;;; properly evaluated according to , and ,@ rules.;;; I work backwards - it seemed a lot easier.  The reason for this is ;;; if I'm in some sort of a routine building a maker and I switch ;;; gears, it seemed to me easier to jump into some other state and ;;; glue what I've already done to the end, than to to prepare that ;;; something and go back to put things together.(defun bq-make-maker (form)  "Given one argument, a `mostly quoted' object, produces a maker.See backquote.el for details"  (let ((tailmaker (quote nil)) (qc 0) (ec 0) (state nil))    (mapcar 'bq-iterative-list-builder (reverse form))    (and state	 (cond ((eq state 'quote)		(list state tailmaker))	       ((= (length tailmaker) 1)		(funcall (bq-cadr (assq state bq-singles)) tailmaker))	       (t (cons state tailmaker))))));;; There are exceptions - we wouldn't want to call append of one ;;; argument, for example.(defconst bq-singles '((quote bq-quotecar)		       (append car)		       (list bq-make-list)		       (cons bq-id)))(defun bq-id (x) x)(defun bq-quotecar (x) (list 'quote (car x)))(defun bq-make-list (x) (cons 'list x));;; fr debugging use only;(defun funcalll (a b) (funcall a b));(defun funcalll (a b) (debug nil 'enter state tailmaker a b);  (let ((ans (funcall a b))) (debug  nil 'leave state tailmaker);       ans));;; Given a state/tailmaker pair that already knows how to make a ;;; partial tail of the desired form, this function knows how to add ;;; yet another element to the burgening list.  There are four cases; ;;; the next item is an atom (which will certainly be quoted); a  ;;; (, xxx), which will be evaluated and put into the list at the top ;;; level; a (,@ xxx), which will be evaluated and spliced in, or ;;; some other list, in which case we first compute the form's maker, ;;; and then we either launch into the quoted case if the maker's ;;; top level function is quote, or into the comma case if it isn't.;;; The fourth case reduces to one of the other three, so here we have ;;; a choice of three ways to build tailmaker, and cit turns out we ;;; use five possible values of state (although someday I'll add ;;; nconcto the possible values of state).;;; This maintains the invariant that (cons state tailmaker) is the ;;; maker for the elements of the tail we've eaten so far.(defun bq-iterative-list-builder (form)  "Called by bq-make-maker.  Adds a new item form to tailmaker, changing state if need be, so tailmaker and state constitute a recipiefor making the list so far."  (cond ((atom form)	 (funcall (bq-cadr (assq state bq-quotefns)) form))	((memq (car form) backquote-unquote)	 (funcall (bq-cadr (assq state bq-evalfns)) (bq-cadr form)))	((memq (car form) backquote-splice)	 (funcall (bq-cadr (assq state bq-splicefns)) (bq-cadr form)))	(t	 (let ((newform (bq-make-maker form)))	   (if (and (listp newform) (eq (car newform) 'quote))	       (funcall (bq-cadr (assq state bq-quotefns)) (bq-cadr newform))	     (funcall (bq-cadr (assq state bq-evalfns)) newform))))	));;; We do a 2-d branch on the form of splicing and the old state. ;;; Here's fifteen functions' names...(defconst bq-splicefns '((nil bq-splicenil)			 (append bq-spliceappend)			 (list bq-splicelist)			 (quote bq-splicequote)			 (cons bq-splicecons)))(defconst bq-evalfns '((nil bq-evalnil)		       (append bq-evalappend)		       (list bq-evallist)		       (quote bq-evalquote)		       (cons bq-evalcons)))(defconst bq-quotefns '((nil bq-quotenil)			(append bq-quoteappend)			(list bq-quotelist)			(quote bq-quotequote)			(cons bq-quotecons)));;; The name of each function is ;;; (concat 'bq- <type-of-element-addition> <old-state>);;; I'll comment the non-obvious ones before the definitions... ;;; In what follows, uppercase letters and form will always be ;;; metavariables that don't need commas in backquotes, and I will ;;; assume the existence of something like matches that takes a ;;; backquote-like form and a value, binds metavariables and returns ;;; t if the pattern match is successful, returns nil otherwise.  I ;;; will write such a goodie someday.;;;   (setq tailmaker ;;;      (if (matches ((quote X) Y) tailmaker) ;;;          (` ((quote (form X)) Y)) ;;;        (` ((list form (quote X)) Y)))) ;;;  (setq state 'append)(defun bq-quotecons (form)  (if (and (listp (car tailmaker))	   (eq (bq-caar tailmaker) 'quote))      (setq tailmaker	    (list (list 'quote (list form (bq-cadr (car tailmaker))))		  (bq-cadr tailmaker)))     (setq tailmaker	  (list (list 'list		      (list 'quote form)		      (car tailmaker))		(bq-cadr tailmaker))))  (setq state 'append))(defun bq-quotequote (form)  (bq-push form tailmaker));;; Could be improved to convert (list 'a 'b 'c .. 'w x)  ;;;                          to (append '(a b c .. w) x) ;;; when there are enough elements(defun bq-quotelist (form)  (bq-push (list 'quote form) tailmaker));;; (setq tailmaker ;;;  (if (matches ((quote X) (,@ Y))) ;;;      (` ((quote (, (cons form X))) (,@ Y)))))(defun bq-quoteappend (form)  (cond ((and (listp tailmaker)	   (listp (car tailmaker))	   (eq (bq-caar tailmaker) 'quote))	 (rplaca (bq-cdar tailmaker)		 (cons form (car (bq-cdar tailmaker)))))	(t (bq-push (list 'quote (list form)) tailmaker))))(defun bq-quotenil (form)  (setq tailmaker (list form))  (setq state 'quote));;; (if (matches (X Y) tailmaker)  ; it must ;;;    (` ((list form X) Y)))(defun bq-evalcons (form)  (setq tailmaker	(list (list 'list form (car tailmaker))	      (bq-cadr tailmaker)))  (setq state 'append));;;  (if (matches (X Y Z (,@ W))) ;;;     (progn (setq state 'append) ;;;            (` ((list form) (quote (X Y Z (,@ W)))))) ;;;     (progn (setq state 'list) ;;;            (list form 'X 'Y .. )))  ;  quote each one there is(defun bq-evalquote (form)  (cond ((< (length tailmaker) 3)	 (setq tailmaker	       (cons form		     (mapcar (function (lambda (x)					 (list 'quote x)))			     tailmaker)))	 (setq state 'list))	(t	 (setq tailmaker	       (list (list 'list form)		     (list 'quote tailmaker)))	 (setq state 'append))))(defun bq-evallist (form)  (bq-push form tailmaker));;;  (cond ((matches ((list (,@ X)) (,@ Y))) ;;;        (` ((list form  (,@ X)) (,@ Y)))) ;;;       ((matches (X)) ;;;        (` (form (,@ X))) (setq state 'cons)) ;;;       ((matches ((,@ X))) ;;;        (` (form (,@ X)))))(defun bq-evalappend (form)  (cond ((and (listp tailmaker)	   (listp (car tailmaker))	   (eq (bq-caar tailmaker) 'list))	 (rplacd (car tailmaker)		 (cons form (bq-cdar tailmaker))))	((= (length tailmaker) 1)	 (setq tailmaker (cons form tailmaker))	 (setq state 'cons))	(t (bq-push (list 'list form) tailmaker))))(defun bq-evalnil (form)  (setq tailmaker (list form))  (setq state 'list));;; (if (matches (X Y))  ; it must ;;;    (progn (setq state 'append) ;;;           (` (form (cons X Y)))))   ; couldn't think of anything clever(defun bq-splicecons (form)  (setq tailmaker	(list form	      (list 'cons (car tailmaker) (bq-cadr tailmaker))))  (setq state 'append))(defun bq-splicequote (form)  (setq tailmaker (list form (list 'quote (list tailmaker))))  (setq state 'append))(defun bq-splicelist (form)  (setq tailmaker (list form (cons 'list tailmaker)))  (setq state 'append))(defun bq-spliceappend (form)  (bq-push form tailmaker))(defun bq-splicenil (form)  (setq state 'append)  (setq tailmaker (list form)))

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品麻豆一区二区| 精品亚洲免费视频| 久久国产精品一区二区| 91蜜桃视频在线| 亚洲国产岛国毛片在线| 日本美女一区二区三区视频| 99精品桃花视频在线观看| 久久伊99综合婷婷久久伊| 亚洲bt欧美bt精品777| 色综合久久久久久久久久久| 久久精品亚洲国产奇米99| 日韩福利电影在线| 在线视频欧美区| 亚洲人妖av一区二区| 国产精品一区二区黑丝| 精品国产乱码久久久久久图片| 亚洲h在线观看| 欧美日韩一区不卡| 亚洲国产精品麻豆| 在线视频你懂得一区| 亚洲黄色片在线观看| 成人午夜视频在线| 国产欧美一区二区精品久导航 | 国产精品另类一区| 国产福利一区二区三区视频在线 | 久久99精品久久久| 日韩一级二级三级精品视频| 首页国产欧美久久| 91精品一区二区三区久久久久久 | 久久国产精品免费| 在线不卡中文字幕播放| 洋洋av久久久久久久一区| av一区二区三区在线| 国产精品萝li| 一本到三区不卡视频| 亚洲精品国产无天堂网2021| 色94色欧美sute亚洲13| 亚洲午夜私人影院| 在线播放欧美女士性生活| 午夜av电影一区| 欧美一区二区女人| 狠狠色2019综合网| 欧美国产日产图区| 色婷婷久久久久swag精品| 樱桃视频在线观看一区| 欧美日韩视频在线观看一区二区三区 | 一区二区三区欧美激情| 精品视频全国免费看| 日本午夜一区二区| 久久久久成人黄色影片| 99re热视频这里只精品| 亚洲黄色小视频| 91精品久久久久久久99蜜桃| 老司机一区二区| 亚洲国产成人午夜在线一区| 91在线观看高清| 日韩av二区在线播放| 久久午夜老司机| 色94色欧美sute亚洲13| 麻豆精品久久久| 日韩美女精品在线| 91精品免费在线观看| 国产成人免费视| 无吗不卡中文字幕| 26uuu国产日韩综合| 91美女在线观看| 久久精品久久精品| 亚洲免费av在线| 精品久久久久一区二区国产| a4yy欧美一区二区三区| 午夜视频一区二区| 中文字幕乱码日本亚洲一区二区| 日本韩国精品一区二区在线观看| 日本亚洲电影天堂| 亚洲欧美日韩国产综合| 精品国产一区二区国模嫣然| 91麻豆蜜桃一区二区三区| 久久狠狠亚洲综合| 亚洲一区免费观看| 国产精品久久久久婷婷| 日韩欧美精品在线| 欧美手机在线视频| 成人美女视频在线观看18| 日韩影院免费视频| 国产精品国产三级国产有无不卡 | 91在线视频在线| 美女诱惑一区二区| 亚洲成人免费视| 一区二区三区久久| 国产欧美一区视频| 日韩精品一区二区三区视频播放| 色综合久久久网| 99精品视频在线观看| 国产suv精品一区二区三区| 美女尤物国产一区| 国产成人午夜精品5599| 免费观看成人av| 午夜精品久久一牛影视| 亚洲靠逼com| 日韩毛片视频在线看| 国产精品系列在线| 久久久亚洲高清| 日韩欧美国产精品| 日韩一二三四区| 欧美一级片在线| 欧美夫妻性生活| 在线播放中文字幕一区| 欧美美女一区二区在线观看| 欧美私人免费视频| 在线观看av一区| 欧美中文字幕不卡| 欧美日韩免费一区二区三区| 精品婷婷伊人一区三区三| 91黄色免费看| 欧美性受极品xxxx喷水| 欧美在线观看视频在线| 欧美日韩国产在线观看| 91精品国产综合久久久久久久久久| 日本久久精品电影| 欧美老年两性高潮| 欧美一区二区在线不卡| 欧美一区二区视频网站| 日韩一级黄色大片| 国产欧美中文在线| 综合分类小说区另类春色亚洲小说欧美| 中文字幕在线观看一区二区| 亚洲婷婷综合久久一本伊一区| 亚洲三级电影全部在线观看高清| 亚洲乱码中文字幕| 亚洲国产日日夜夜| 另类调教123区 | 亚洲国产精品欧美一二99| 五月婷婷激情综合| 精品一区二区综合| 成人免费毛片嘿嘿连载视频| www.爱久久.com| 欧美日韩另类国产亚洲欧美一级| 欧美久久一二三四区| 欧美va在线播放| 国产精品成人网| 亚洲mv大片欧洲mv大片精品| 国产一区二区三区免费在线观看| 成人毛片视频在线观看| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲在线观看免费视频| 美女在线观看视频一区二区| 成人激情图片网| 在线播放中文字幕一区| 国产精品青草久久| 日日摸夜夜添夜夜添国产精品| 国产高清亚洲一区| 精品视频免费在线| 国产欧美精品国产国产专区| 亚洲国产成人tv| 国产精品一品二品| 欧美午夜宅男影院| 久久久久亚洲蜜桃| 香蕉久久一区二区不卡无毒影院| 国产精品白丝av| 欧美日韩成人综合| 国产精品丝袜在线| 午夜不卡在线视频| 日韩欧美国产三级电影视频| 日韩av不卡一区二区| 亚洲欧洲韩国日本视频| 亚洲成av人片在www色猫咪| 韩国精品主播一区二区在线观看| av亚洲精华国产精华精| 日韩免费电影网站| 亚洲一区二区三区四区五区黄| 国产精品综合久久| 6080yy午夜一二三区久久| 日韩一区在线免费观看| 国产又黄又大久久| 欧美二区三区91| 亚洲一区日韩精品中文字幕| av亚洲精华国产精华精| 26uuu国产一区二区三区| 日韩精品乱码av一区二区| 91蜜桃传媒精品久久久一区二区| 久久精品欧美一区二区三区不卡| 日日摸夜夜添夜夜添亚洲女人| 色综合久久88色综合天天免费| 国产女人aaa级久久久级| 美女尤物国产一区| 91精品国产综合久久久蜜臀图片| 一区二区三区四区精品在线视频| 国内精品不卡在线| 欧美一级欧美三级| 天堂va蜜桃一区二区三区| 欧美专区日韩专区| 亚洲综合色在线| 91搞黄在线观看| 一区二区高清在线| 欧美中文一区二区三区| 亚洲一区自拍偷拍| 欧美日本一区二区三区| 伊人开心综合网| 在线精品亚洲一区二区不卡| 一区二区三区影院|