Common LISP 命令大全

来源:https://www.cnblogs.com/mariocanfly/archive/2022/08/14/16584882.html
-Advertisement-
Play Games

書籍下載地址: Ansi Common Lisp 中文版|百度網盤 實用Common.Lisp編程 .pdf|百度網盤 LISP指令速查網站推薦: Simplified Common Lisp reference (jtra.cz) 我製作的表格: 由於Common LISP命令很多,經常忘,所以做 ...


書籍下載地址:

Ansi Common Lisp 中文版|百度網盤

實用Common.Lisp編程 .pdf|百度網盤

LISP指令速查網站推薦:

Simplified Common Lisp reference (jtra.cz)

我製作的表格:

由於Common LISP命令很多,經常忘,所以做個這個表格,方便速查。

表格中命令的順序基本為ANSI Common LISP這本書中命令出現的順序。

命令 含義 例子
T
NIL
+-*/ 加減乘除 > (+ 2 3 4)
9
>和< 大於和小於 > (> 2 1)
T
CHAR<和CHAR> 字元比較
** 全局變數需要左右加上星號 > (setf *print-array* t)
T
ZEROP 為0時返回真
CHARACTERP 是否為字元
/= 不相等
= 判斷相等(建議到這個網站查看具體解釋)。僅能判斷數字。 > (= 4 4.0)
 T
EQ 是否完全相同。內容相同但是記憶體位置不同也為不同。不用於數字。 > (eq (cons 'a 'b) (cons 'a 'b))
NIL
> (eq 'a 'a)
T
EQL 與EQ相似。可以比較數字。
EQUAL 是否內容相同。記憶體位置可以不同。字元串大小寫敏感 > (equal (list 1 (cons 2 3)) (list 1 (cons 2 (+ 2 1))))
T
EQUALP 字元串大小寫不敏感
AND OR NOT 邏輯與、或、非
ODDP 是否為奇數
EVENP 是否為偶數
QUOTE(`) 不求值 > `(+ 1 2)
(+ 1 2)
CONS 構建一個長度為2的列表
(但第二個輸入值可以是一個列表)
> (cons 'a '(b c d))
(A B C D)
CONSP 判斷是否為CONS
LIST 構建一個列表
CAR 獲取列表第一個元素
CDR 獲取列表第二個以及
之後的元素構成的列表
THIRD 獲取列表第三個元素
LISP 判斷輸入是否為列表
NULL 判斷是否為空表或NIL
IF IF
DEFUN 聲明全局函數 (defun our-third (x)
(car (cdr (cdr x))))
調用時:(our-third (1 2 3))
(DEFUN的參數列表
&rest 剩餘的參數。會被包裝為列表。 (defun our-funcall (fn &rest args)
(apply fn args))
&optional 可選參數 (defun philosoph (thing &optional (property 'fun))
(list thing 'is property))
&key 關鍵字參數 > (defun keylist (a &key x y z)
(list a x y z))
KEYLIST
> (keylist 1 :y 2)
(1 NIL 2 NIL)
)
EQL 相等判斷
FORMAT 輸出 > (format t "~A plus ~A equals ~A. ~%" 2 3 (+ 2 3))
2 PLUS 3 EQUALS 5
NIL
~A 數據輸出的位置,相當於C語言的%d
~% 換行符
READ 輸入 > let ((val (read))
LET 定義局部變數 > (let ((x 1) (y 2))
(+ x y))
3
DEFPARAMETER 創建全局變數(變數需要加星號) > (defparameter *glob* 99)
DEFCONSTANT 定義全局常量(不需要星號)
BOUNDP 判斷是否為全局變數或常量 > (boundp '*glob*)
T
SETF 賦值(給全局或局部變數),可以創建全局變數
INCF 自加。相當於c的++
REMOVE 返回不包含這個對象的新列表,但不改變原列表 > (setf lst '(c a r a t))
(C A R A T)
> (remove 'a lst)
(C R T)
DELETE REMOVE的破壞性版本。但不能保證所需移除的元素都能移除。 > (setf lst '(a r a b i a) )
(A R A B I A)
> (delete 'a lst )
(R B I)
> lst
(A R B I)
DO 迴圈
(DO (變數定義)
(結束條件 返回值)
迴圈主體)
其中變數定義為(變數名 變數初值 (變數變化語句))
(defun show-squares (start end)
(do ((i start (+ i 1)))
((> i end) 'done)
(format t "~A A%" i (* i i))))
DOTIMES 迴圈次數 (dotimes (x 5 x)
(format t "~A " x))
0 1 2 3 4
5;; 第一行第二個x是返回值,可以不加
LOOP 迴圈巨集 > (loop for x from 0 to 9
do (princ x))
0123456789
NIL
> (loop for x = 8 then (/ x 2)
until (< x 1)
do (princ x))
8421
NIL
(defun sumx (n)
(loop for x from 1 to n
sum x));;返回從1加到n的結果
> (loop for x from 1 to 5
collect (random 10))
(3 8 6 5 0)
(defun even/odd (ns)
(loop for n in ns
if (evenp n)
collect n into evens
else collect n into odds
finally (return (values evens odds))))
> (even/odd '(1 2 3 4))
(2 4)
(1 3)
PROGN 接受任意數量的表達式,依序對它們求值,並返回最後一個值。
DOLIST for each... > (dolist (obj lst) 相當於C++的for(auto obj:lst){,相當於Python的for obj in lst:
FUNCTION(#') 把函數當做實參傳入
APPLY 接受函數和實參列表,並返回把傳入函數應用在後面實參的結果 > (apply #'+ '(1 2 3))
6
FUNCALL 功能和APPLY相同,但實參不需要包裝成列表。 > (funcall #'+ 1 2 3)
6
LAMBDA Lambda表達式 (lambda (x y)
(+ x y))
> (funcall #'(lambda (x) (+ x 100)) 1)
TYPEP 判斷是否為某種類型 > (typep 27 'integer)
T
COPY-LIST 返回列表的複製
ATOM 驗證一個項是否為原子(即列表的一個項)
APPEND 返回列表串接 > (append '(a b) '(c d) 'e)
(A B C D E)
NCONC 返回列表串接並更新第一個列表的最後一個 cons 單元的 next 指針。 > (let ((l1 (list 1 2 3))
(l2 (list 4 5 6)))
(nconc l1 l2)
l1)
(1 2 3 4 5 6)
NTH 通過索引獲取列表元素 > (nth 0 '(a b c))
A
NTHCDR 找到第n個CDR > (nthcdr 2 `(a b c d e))
(C D E)
LAST 返回列表最後一個CONS對象 > (last '(a b c))
(C)
LAST的CAR 返回列表的最後一個元素 > (car (last '(a b c))) 
C
SECOND 返回第二個元素
CADR 返回第二個元素(相當於CDR的CAR)
CADDR 返回第三個元素(相當於CDR的CDR的CAR)可以無限加D。
MAPCAR 返回把函數應用到列表每個元素的結果 > (mapcar #'(lambda (x) (+ x 10))
'(1 2 3))
(11 12 13)
MAPCAN 類似MAPCAR。但它返回值是用NCONC拼接在一起的。
MAPC 把函數應用到列表每個元素,返回原來的列表
MAP 把函數應用到列表每個元素,可定義返回的類型。 (map 'list (lambda (x) (+ x 10)) '(1 2 3 4))
(11 12 13 14)
MAP-INTO 把函數應用到列表每個元素,第一個參數不是一個序列類型,而是用來存儲結果的。 > (let ((a (list 1 2 3 4))) (map-into a #'* a a) a)
(1 4 9 16)
還可以:(setf v (map-into v #'1+ v))
MAPLIST 將列表的漸進的下一個 CDR傳入函數 > (maplist #'(lambda (x) x) '(a b c))
((A B C) (B C) (C))
MEMBER 判斷元素是否為列表的成員。可以傳入參數:TEST和:KEY > (member 'b '(a b c))
(B C)
> (member '(a) '((a) (z)) :test #'equal)
((A) (Z))
> (member 'a '((a b) (c d)) :key #'car)
((A B) (C D)) ;;在這個例子里,我們詢問是否有一個元素的CAR是 a
MEMBER-IF 返回由滿足條件的元素構成的列表 > (member-if #'oddp '(2 3 4))
(3 4)
ADJOIN 如果對象還不是列表的,成員,構建對象至列表上 > (adjoin 'b '(a b c))
(A B C)
> (adjoin 'z '(a b c))
(Z A B C)
UNION 並集
INTERSECTION 交集
SET-DIFFERENCE 補集 > (set-difference '(a b c d e) '(b e))
(A C D)
LENGTH 返回元素的數目
SUBSEQ 獲取列表的一部分,相當於其他語言的Slice > (subseq '(a b c d) 1 2)
(B)
>(subseq '(a b c d) 1)
(B C D)
REVERSE 列表反轉
NREVERSE 使原列表反轉?
EVERY 判斷列表每個元素都滿足條件 > (every #'oddp '(1 3 5))
T
SOME 判斷列表部分元素滿足條件 > (some #'evenp '(1 2 3))
T
PUSH 把元素插入列表的前端
POP 移除列表的第一個元素,並返回這個元素
ASSOC 返回列表中CAR為指定元素的列表 > (setf min '((a b c) (b c) (c d)))
> (cdr (assoc 'a min))
(B C)
MAKE-ARRAY 構造數組 > (setf arr (make-array '(2 3) :initial-element nil)) ;;構造了一個2x3的數組
AREF 通過索引獲取數組元素 > (setf (aref arr 0 0) 'b)
B>
(aref arr 0 0)
B
#na 表示字面常量的數組,其中n是數組的維度 #2a((b nil nil) (nil nil nil))
VECTOR 向量 > (vector "a" 'b 3)
VECTOR-PUSH 把元素插入向量的前端
VECTOR-POP 移除向量的第一個元素,並返回這個元素
SVREF 通過索引獲取向量元素
SORT 字元串排序 > (sort "elbow" #'char<)
"below"
CHAR 通過索引獲取字元串元素
COPY-SEQ 返回序列(字元串)的複製
CONCATENATE 連接 > (concatenate 'string "not " "to worry")
"not to worry"
TAILP 如果第一個列表是第二個列表的一部分,則返回T
ELT 通過索引獲取任何種類的序列元素。針對特定類型的序列,特定的存取函數會比較快,所以使用 elt 是沒有意義的,除非在代碼當中,有需要支持通用序列的地方。
POSITION 返回序列中一個元素的位置,未找到元素時返回 nil。參數:start :end :test > (position #\a "fantasia")
1>
(position #\a "fantasia" :start 3 :end 5)
4
> (position 3 '(1 0 7 5) :test #'<)
2
SUBSEQ 獲取子串(SUBSEQ STR P1 P2)
POSITION-IF 返回第一個滿足此函數的元素 > (position-if #'oddp '(2 3 4 5))
1
FIND 返回要尋找的對象 > (find #\a "cat")
#\a
FIND-IF 返回要尋找的滿足函數的對象 > (find-if #'characterp "ham")
#\h
REMOVE-DUPLICATES 僅保留序列中每個元素的最後一次出現。
REDUCE 把序列壓縮成一個值 (reduce #'fn '(a b c d))等同於(fn (fn (fn 'a 'b) 'c) 'd)
DEFSTRUCT 定義結構體 (defstruct point
x
y)
MAKE-HASH-TABL 創建哈希表,無需參數。 > (setf ht (make-hash-table))
GETHASH 獲取一個鍵值 > (setf (gethash 'color ht) 'red)
RED
REMHASH 從一個哈希表中移除一個詞條,若返回T,說明有詞條被移除
BLOCK
RETURN-FROM 返回塊 > (block head
(format t "Here we go.")
(return-from head 'idea)
(format t "We'll never see this."))
Here we go.
IDEA
RETURN 返回
TAGBODY
GO 相當於其他語言的goto。需要在TAGBODY下使用 > (tagbody
(setf x 0)
top
(setf x (+ x 1))
(format t "~A " x)
(if (< x 10) (go top)))
1 2 3 4 5 6 7 8 9 10
NIL
LET* 相當於嵌套版本的LET,可以依賴一個表達式設立另一個變數。可以把x設為1,同時把y設為x+1.原版LET就不行。
WHEN 當測試為真時,對主體求值
UNLESS 僅在測試表達式返回假時,才對主體求值
CASE 相當於C語言的switch (defun month-length (mon)
(case mon
((jan mar may jul aug oct dec) 31)
((apr jun sept nov) 30)
(feb (if (leap-year) 29 28))
(otherwise "unknown month")))
TYPECASE 按照類型來switch (TYPECASE X
(NUMBER (* X 2)))
VALUES 返回多個值
MULTIPLE-VALUE-BIND 綁定多個值。如果變數的數量大於數值的數量,剩餘的變數會是 nil 。如果數值的數量大於變數的數量,多餘的值會被捨棄。
CATCH 捕獲異常 (defun super ()
(catch 'abort
(sub)
(format t "We'll never see this.")))
(defun sub ()
(throw 'abort 99))
> (super)
99
THROW 拋出異常
ERROR 拋出異常文字 (ERROR "Oops!")
UNWIND-PROTECT 使程式不會被報錯打斷 (UNWIND-PROTECT
FBOUNDP 是否有函數與給定符號綁定 > (fboundp '+)
T
SYMBOL-FUNCTION 返回函數。可用於給函數配置某個名字。 (setf (symbol-function 'add2)
#'(lambda (x) (+ x 2)))
> (add2 1)
3
DOCUMENTATION 獲取函數的文檔字串 > (DOCUMENTATION #'+ 'function)
"sum of its arguments. With no args, returns 0."
LABELS 聲明局部函數。用法與DEFUN一樣。
COND 直到某個條件為真時才返回 > (cond ((> 3 4) "variant 1")
((> 4 2) "variant 2")
(t "always valid variant"))
"variant 2"
DECLARE(SPECIAL x) 使x為動態作用域(詳見ANSI COMMON LISP 76頁)
COMPILED-FUNCTION-P 檢查函數是否已被編譯
COMPILE 編譯函數
COMPILE-FILE 編譯文件
MAKE-PATHNAME 新建一個路徑。參數有host, device, directory, name, type 以及 version > (setf path (make-pathname :name "myfile"))
OPEN 打開文件流。需要一個路徑和大量選擇性關鍵字參數。 > (setf str (open path :direction :output :if-exists :supercede)) ;;supercede表示取代。output表示寫文件。input表示讀文件。
CLOSE 關閉文件
READ-LINE 從文件流中讀一行。若不指定文件流,則從標準輸入中讀一行,相當於READ。
WITH-OPEN-FILE 相當於Python的with,不需要close,保證文件能夠關閉。 (with-open-file (str path :direction :output
:if-exists :supercede)
(format str "Something~%"));;向文件寫入Something\n
PRIN1 輸出包含雙引號。給程式產生輸出。
PRINC 輸出不包含雙引號。給人類產生輸出。
SYMBOL-NAME 獲取符號名 > (symbol-name 'abc)
"ABC"
垂直杠之間的字元序列將被視為符號。
SYMBOL-PLIST 獲取符號的屬性列表(PLIST) > (setf (get 'alizarin 'color) 'red)
RED
> (get 'alizarin 'color)
RED
> (setf (get 'alizarin 'transparency) 'high)
HIGH
> (symbol-plist 'alizarin)
(TRANSPARENCY HIGH COLOR RED)
DEFPACKAGE 定義包 (defpackage "MY-APPLICATION"
(:use "COMMON-LISP" "MY-UTILITIES")
(:nicknames "APP")
(:export "WIN" "LOSE" "DRAW"))
(in-package my-application)
這段代碼定義了新包my-application,使用了兩個包,COMMON-LISP和MY-UTILITIES,一個昵稱為APP,這樣背的包可以這樣引用符號APP:WIN。包本身只輸出三個符號"WIN"、"LOSE"和"DRAW"。
IN-PACKAGE 包結尾
FLOAT 將任何實數轉換為浮點數
TRUNCATE 返回任何實數的整數部分
FLOOR 返回小於等於參數的最大整數
CEILING 返回大於等於參數的最小整數
ROUND 返回最接近參數的整數 > (mapcar #'round '(-2.5 -1.5 1.5 2.5))
(-2 -2 2 2);;不做五入,而是取最近的偶數
RANDOM 接受一個整數或浮點數。返回一個小於n的數字
SIGNUM 返回參數的符號。可以返回-1,0或1
FLOAT 轉換為浮點數 > (/ 365 12)
365/12;;比值
> (float 365/12)
30.416666
EXPT (expt x n) = x^n
LOG (log x n) = \(\log_{n}x\), 若預設n,則n預設為e
EXP (exp x) = e^x
SQRT 平方根
SIN、COS、TAN 三角函數
ASIN、ACOS、ATAN 反三角函數
SINH、COSH、TANH 雙曲函數
ASINH、ACOSH、ATANH 反雙曲函數
PI 常數π
short-float短浮點、single-float單精度浮點、double-float雙精度浮點、long-float長浮點
MOST-POSITIVE-FIXNUM最大整數、MOST-NAGATIVE-FIXNUM最小整數 (不同實現下不同)
EVAL 與Python的eval功能相同。可把列表視作代碼 > (eval '(+ 1 2 3))
6
DEFMACRO 聲明巨集 (defmacro nil! (x)
(list 'setf x nil))
也可定義為:
(defmacro nil! (x)
`(setf ,x nil))
> (nil! x)
NIL
> x
NIL
MACROEXPAND-1 展開巨集(用於測試) > (macropexpand-1 '(nil! x))
(SETF X NIL)
T
, 在反引號表達式中重啟求值 > (setf a 1 b 2)
2>
> `(a is ,a and b is ,b)
(A IS 1 AND B IS 2)
,@ 與逗號相似,但將其(本來應該是列表的)參數扒開。 > (setf lst '(a b c))
(A B C)
> `(lst is ,lst)
(LST IS (A B C))
> `(its elements are ,@lst)
(ITS ELEMENTS ARE A B C)
GENSYM 自由符號。保證巨集定義的變數不會與外面的變數重名。 (defmacro ntimes (n &rest body)
(let ((g (gensym))
(h (gensym)))
`(let ((,h ,n))
(do ((,g 0 (+ ,g 1)))
((>= ,g ,h))
,@body))))
DEFCLASS 聲明類 (defclass circle ()
(radius center));;這說明類circle的實例包含兩個槽,分別名為radius和center.
MAKE-INSTANCE 創建類的實例 > (setf c (make-instance 'circle))
SLOT-VALUE 槽的值 > (setf (slot-value c 'radius) 1)
(槽的屬性
:accessor、:writer、:reader 可讀寫、可寫、可讀 (defclass circle ()
((radius :accessor circle-radius)
(center :accessor circle-center)))
> (setf c (make-instance 'circle))
#<CIRCLE #XC5C726>
> (setf (circle-radius c) 1)
1
> (circle-radius c)
1
:initarg 定義參數名
:initform 定義預設值 (defclass circle ()
((radius :accessor circle-radius
:initarg :radius
:initform 1)
(center :accessor circle-center
:initarg :center
:initform (cons 0 0))))
> (setf c (make-instance 'circle :radius 3))
#<CIRCLE #XC2DE0E>
> (circle-radius c)
3
> (circle-center c)
(0 . 0)
:acclocation :class 定義類變數 (defclass tabloid ()
((top-story :accessor tabloid-story
:allocation :class)))
> (setf daily-blab (make-instance 'tabloid)
unsolicited-mail (make-instance 'tabloid))
#<TABLOID #x302000EFE5BD>
> (setf (tabloid-story daily-blab) 'adultery-of-senator)
ADULTERY-OF-SENATOR
> (tabloid-story unsolicited-mail)
ADULTERY-OF-SENATOR
)
DEFMETHOD 定義方法。支持重載,甚至可以對單一的對象做特化。 (defmethod combine ((x number) (y number))
(+ x y)
(defmethod combine ((x (eql 'powder)) (y (eql 'spark)))
'boom)
:before :after :around 標準方法組合機制(standard method combination)規定,調用一個函數會調用:around方法,如果有的話;否則,依序調用:before方法、主方法、:after方法
DECLARE、DECLAIM 聲明(局部、全局)。
DECLARE(OPTIMIZE (SPEED 3)  (SAFTEY 0)) 編譯參數。speed 0~3。3最快。作用在函數里。 (declaim (optimize (speed 3)
(compilation-speed 0)
(safety 0)
(debug 0)));;這塊代碼讓所有代碼在任何情況下都儘可能更快。
(DECLAIM(INLINE x)) 使函數x為內聯函數。能提高運行速度。遞歸函數不能內聯。 (declaim (inline single?))
(defun single? (lst)
(and (consp lst) (null (cdr lst))))
(DECLAIM (FIXNUM x)) 聲明x為定長數(整數)。 (defun poly (a b x)
(declare (fixnum a b x))
(+ (* a (expt x 2)) (* b x)))
(declare (type (vector fixnum 20) v));; 聲明瞭一個僅含有定長數,企鵝長度固定為20的向量。
(常見函數及其破壞性版本
安全 破壞性
append nconc
reverse nreverse
remove delete
remove-if delete-if
remove-duplicates delete-duplicates
subst nsubst
subst-if nsubst-if
union nunion
intersection nintersection
set-difference nset-difference
)
DEFTYPE 定義類型標識符 (deftype multiple-of (n)
`(and integer (satisfies (lambda (x)
(zerop (mod x ,n))))))
> (type 12 '(multiple-of 4))
T;;定義了4的倍數的標識符
PACKAGE-NAME 返回包的名字
FIND-PACKAGE 返回一個給定名稱的包 > (find-package "COMMON-LISP-USER")
#<Package "COMMON-LISP-USER" 4CD15E>
SYMBOL-PACKAGE 接受一個符號並返回該符號被 interned 的包
EXPORT 使符號對其他包可視(可用單冒號訪問,不可視時只能用雙冒號訪問)
IMPORT 導入包
USE-PACKAGE 使用包
TRACE 追蹤函數,用於調試,可在每次函數調用時顯示輸入的參數
UNTRACE 取消追蹤函數

本文來自博客園,作者:mariocanfly,轉載請註明原文鏈接:https://www.cnblogs.com/mariocanfly/p/16584882.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、導入模塊 import requests import csv from concurrent.futures import ThreadPoolExecutor 2、先獲取第一個頁面的內容 分析得到該頁面的數據是從getPriceData.html頁面獲取,並保存在csv文件中 得到url地址 ...
  • 動態規劃的引入 動態規劃(Dynamic Programming,DP)是運籌學的一個分支,是求解決策過程最優化的過程。20世紀50年代初,美國數學家貝爾曼(R.Bellman)等人在研究多階段決策過程的優化問題時,提出了著名的最優化原理,從而創立了動態規劃。動態規劃的應用極其廣泛,包括工程技術、經 ...
  • 1. 認識RabbitMQ 1.1介紹RabbitMQ RabbitMQ 是開源的高級消息隊列協議(Advanced Message Queueing Protocol, AMQP) 的實現,用Erlang 語言編寫,支持多種客戶端。 RabbitMQ是目前應用相當廣泛的消息中間件(其他同類的消息處 ...
  • 你必須非常努力,才能看起來毫不費力! 微信搜索公眾號[ 漫漫Coding路 ],一起From Zero To Hero ! 前言 日常 Go 開發中,Context 包是用的最多的一個了,幾乎所有函數的第一個參數都是 ctx,那麼我們為什麼要傳遞 Context 呢,Context 又有哪些用法,底 ...
  • 最近在看C語言代碼時碰到了這個問題,結合查找的資料對這C的知識點做了一下小結。寫了一份測試它們的代碼。test1函數穿了一個char* const的指針,如果對它增加,會報錯,它是只讀的。但是可以對指針所指位置的內容進行更改。test2函數測試的是const char類型的參數,test3函數測試的 ...
  • java中只有值傳遞 為什麼這麼說?兩個例子: public class Student { int sage = 20; String sname = "雲胡不歸"; public static void change(Student s1) { s1.sname = "荀一"; s1.sage ...
  • 一.元素操作 send_keys:賦值 clear:清空 click:點擊 from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.ge ...
  • 前言 紅黑樹是一種特殊的B樹是B樹種2-3-4樹的一種特殊實現,紅黑樹保證了每個節點只會有兩個子節點,通過對每個節點進行染色,然後通過不同顏色的節點組合來分別代表2-3-4的2節點、3節點、4節點樹的情況。在學習紅黑樹之前,我們需要先去瞭解2-3-4樹。 一、 B樹 那麼如果想要對紅黑樹有一個較為深 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...