Sunday, 15 December 2013

[scheme] car, cdr và cons

car, cdrcons là 3 primitive của scheme

Từ mới, bạn CHƯA cần phải cố hiểu chúng, cứ đọc nó như một từ mới thôi:
  • car
  • cdr
  • cons
  • primitive
  • S-expression


Hãy mở #guile lên và gõ vào rồi sẽ hiểu:
CHÚ Ý: dấu single quote trước (1.

scheme@(guile-user)> (define li '(1 2 3 4 5))
scheme@(guile-user)> (car li)
$8 = 1

scheme@(guile-user)> (cdr li)
$9 = (2 3 4 5)
scheme@(guile-user)> (car (cdr li))
$10 = 2
scheme@(guile-user)> (cons 0 li)
$11 = (0 1 2 3 4 5)
scheme@(guile-user)> (cons 0 ())
While compiling expression:
ERROR: Syntax error:
unknown location: unexpected syntax in form ()
scheme@(guile-user)> (define el ())
While compiling expression:
ERROR: Syntax error:
unknown location: unexpected syntax in form ()
scheme@(guile-user)> (define el '())
scheme@(guile-user)> (cons 'conma el)
$12 = (conma)

(define li '(1 2 3 4 5)) định nghĩa  variable li có giá trị là một list (1 2 3 4 5)

car nhận đầu vào là 1 non-empty list và trả về S-expression đầu tiên trong list đó.
cdr nhận đầu vào là 1 non-empty list và trả về list đó trừ phần tử đầu tiên.

cons lấy 2 argument, argument đầu tiên là một S-expression bất kỳ,
argument thứ 2 là một list bất kỳ. cons sẽ thêm argument thư nhất vào  đầu list arugment thứ 2.

Hãy luyện tập để quen với car, cdr và cons
những điều thú vị sẽ đến vào phần sau...
scheme@(guile-user)> (car (cdr (cdr '(tao (xoai) (cam mit oi)))))
$13 = (cam mit oi)