Wolfram 編程語言|香港編程學院 | Wolfram課程

從基礎語法到實戰應用,
一站學會 Wolfram Language

本網站專為初學者與想快速建立系統觀念的學習者設計,內容涵蓋 Wolfram 語言的核心語法、符號運算思維、函數式風格、規則與樣式比對、資料處理、視覺化,以及互動式小測驗。

學習重點 01

理解 Wolfram 語言「一切皆為表達式」的核心概念,這是它和許多命令式語言最大的差異。

學習重點 02

掌握函數應用、純函數、規則替換與樣式比對,才能真正寫出符合 Wolfram 風格的程式。

學習重點 03

學會使用內建函數處理列表、關聯、圖形與互動介面,減少自行重造輪子的工作量。

學習重點 04

透過範例與測驗檢查理解程度,將語法知識轉化為實作能力。

Start Here

課程導覽:先建立正確的思維

Wolfram 語言不是單純把數學函數寫成程式碼而已;它更像是一套「符號式計算語言」。你會經常看到函數、資料、規則、圖形都被當成表達式來操作。因此,若你以前主要使用 C、JavaScript、Python 或 Java,最需要先適應的不是語法外觀,而是整個程式設計哲學。

1. 一切皆為表達式

在 Wolfram 中,數字、字串、清單、圖形、函數呼叫、規則,幾乎都能視為表達式。這使得程式可以直接操作程式本身的結構。

Symbolic Expression Structure

2. 內建函數非常多

Wolfram Language 擁有數千個整合良好的內建函數,強調高層次、整體化的使用方式。

Built-in Functions High-level

3. 規則與樣式比對是核心武器

樣式比對(Patterns)和替換規則(Rules)不是附加功能,而是 Wolfram 語言中極重要的程式設計基礎。

Patterns Rules Transformations
學習建議: 如果你是第一次接觸 Wolfram 語言,建議學習順序為: 基本括號規則 → 指派與定義 → 列表與函數映射 → 純函數 → Patterns/Rules → 視覺化 → 互動應用
Syntax Tutorial

語法教學

以下整理了最常用、也最容易搞混的 Wolfram 語法。

01

函數使用中括號,不是小括號

Wolfram 的函數呼叫形式是 f[x],不是 f(x)。此外,內建符號通常以大寫字母開頭,像是 PlotMapTable

Sin[Pi/2]
Plot[x^2, {x, -3, 3}]
Table[n^2, {n, 1, 5}]
重點:函數參數放在 [];列表通常用 {}
02

四種常見括號:[], {}, (), <| |>

學 Wolfram 時最重要的基本功之一,就是正確分辨各種括號用途。

語法 用途 範例
[] 函數參數 Range[5]
{} 列表、區間規格、迭代器 {1,2,3}
() 控制運算優先序 (a+b)^2
<| |> Association 關聯結構 <|"name" -> "Ada", "age" -> 20|>
03

Set (=) 與 SetDelayed (:=) 的差別

= 會立即計算右側,再把結果存起來;:= 則會延後到每次呼叫時才重新計算。這是初學者最常踩雷的地方。

立即指派:=

r = RandomInteger[{1, 100}]
r
r

結果固定,因為第一次就已經算好了。

延遲指派::=

r := RandomInteger[{1, 100}]
r
r

每次都可能不同,因為每次都重新求值。

04

列表與元素存取

列表是 Wolfram 非常核心的資料結構。你會經常搭配 Part 或簡寫 [[ ]] 使用。

data = {10, 20, 30, 40, 50}
data[[1]]
data[[3]]
data[[2 ;; 4]]
說明:
data[[1]] 取得第一個元素。
data[[2 ;; 4]] 代表從第 2 個取到第 4 個。
05

規則與替換:->、:>、/.

Wolfram 語言大量使用規則式寫法。a -> b 是規則;expr /. rule 表示把規則套用到表達式上。

expr = x^2 + 2 x + 1
expr /. x -> 3

{x, y, z} /. x -> 100

x^2 + y^2 /. {x -> 2, y -> 5}
規則思維非常重要:你不是只在「執行指令」,而是在「轉換表達式」。
06

純函數:#、&、/@、//

純函數是 Wolfram 函數式風格的基本元素。

(#^2 + 1) &[5]

(#^2) /@ {1, 2, 3, 4}

Range[5] // Total
寫法 意思
# 純函數的第 1 個匿名參數
& 純函數結尾標記
/@ Map,把函數套到列表每個元素
// 後置應用,例如 x // f 等同 f[x]
07

Patterns:_、x_、x_Integer、/;

(blank)是最基礎的模式物件,代表「任何表達式」;x_ 則是在匹配時給它一個名字。也可限制 head,例如 x_Integer,或使用 /; 增加條件。

f[x_] := x^2
f[5]

g[x_Integer] := x + 100
g[8]

fac[n_Integer] /; n > 0 := n fac[n - 1]
fac[1] = 1
重點: x_ 代表任何表達式;x_Integer 限定整數;/; 代表「當條件成立時」才套用定義。
08

流程控制與局部變數

雖然 Wolfram 很強調函數式與規則式設計,但它也提供常見流程控制,例如 IfWhichDoTableModule 等。

sign[x_] := If[x > 0, "正數", If[x < 0, "負數", "零"]]

Table[n^3, {n, 1, 5}]

Module[{x = 10, y = 20},
  x + y
]
Module 用於建立局部變數,避免和外部符號衝突。
Examples

範例應用:把語法變成實作

這一區整理幾個最能代表 Wolfram 優勢的入門應用:符號運算、資料處理、繪圖視覺化與互動操作。

範例 1:符號代數運算

Wolfram 最有代表性的能力之一就是符號式數學。你可以先表示一個公式,再對它進行展開、因式分解、求解與微積分操作。

expr = (x + 1)^4
Expand[expr]
Factor[x^2 + 2 x + 1]
Solve[x^2 - 5 x + 6 == 0, x]
D[Sin[x]^2, x]
Integrate[x^2, x]
這類功能特別適合數學、科學計算、工程建模與教育內容設計。

範例 2:列表與資料篩選

透過 SelectMapGroupByCountsBy 等內建函數,常見資料處理工作可以寫得非常精簡。

scores = {87, 92, 58, 77, 100, 69, 81};

passed = Select[scores, # >= 60 &]
curve = (# + 5) & /@ scores
sorted = Sort[scores]

words = {"apple", "ant", "banana", "boat", "cat", "car"};
GroupBy[words, StringTake[#, 1] &]

範例 3:繪圖與資料視覺化

Wolfram 語言提供多種函數與資料繪圖方式,並會自動處理很多繪圖細節。

Plot[Sin[x], {x, 0, 2 Pi},
  PlotLabel -> "正弦函數",
  AxesLabel -> {"x", "Sin[x]"},
  PlotStyle -> Blue
]

ListLinePlot[{3, 5, 4, 9, 7, 10},
  PlotMarkers -> Automatic,
  PlotLabel -> "成績變化"
]
不只數學函數,離散資料、時間序列、3D 圖形、網路圖等也都很常見。

範例 4:互動式小工具

Wolfram 的 notebook 與互動功能相當強,Manipulate 可以快速做出教學展示、參數調整介面或原型工具。

Manipulate[
  Plot[a Sin[x], {x, 0, 2 Pi},
    PlotRange -> {-5, 5},
    PlotLabel -> Row[{"a = ", a}]
  ],
  {a, 1, 5}
]
這在數學教學、物理模擬、工程參數探索中非常實用。

範例 5:用規則改寫表達式

這是最能體現 Wolfram 特色的例子之一。你可以像在做「結構轉換」一樣處理公式與程式。

expr = a x^2 + b x + c

expr /. x -> y + 1

{x^2, x^3, y^2, z} /. x^n_ -> HoldForm["x 的次方,指數為 " <> ToString[n]]

Cases[{x^2, x, y^3, z^5, 3}, _^_]
你不只是「算結果」,也可以「分析結構」。
Cheat Sheet

Wolfram 速查表

下面整理最常用的簡寫與概念,方便複習。

常用語法速記

語法 說明
f[x]函數呼叫
{a,b,c}列表
expr[[i]]取第 i 個部分
x = 5立即指派
f[x_] := ...函數定義
# &純函數
/@Map
//後置應用
->規則
/.替換套用

初學者常見錯誤

錯誤 正確觀念
把函數寫成 f(x)應寫成 f[x]
亂用 =:=先分清立即求值與延遲求值
忽略列表大括號很多函數都依賴 {} 規格
不理解 pattern函數定義與規則替換常依賴 pattern
過度用迴圈先思考能否用 MapSelectTable
Quiz Time

小測驗:檢查你是否真的理解

每題只有一個正確答案。作答後可立即查看成績與解析。

目前尚未作答

完成下方 8 題後,按下「批改測驗」即可看到分數與建議。

1. 在 Wolfram 中,函數呼叫應該使用哪一種括號?

2. x := RandomInteger[{1,10}] 的意思是?

3. 哪一個符號最常用來表示「任何表達式」的 pattern?

4. /@ 是哪一個函數的簡寫?

5. expr /. x -> 3 的作用是?

6. data[[2]] 的意思是?

7. 哪個定義限制參數必須是整數?

8. 若想把一個函數套用到列表每個元素,最符合 Wolfram 風格的寫法是?