Thứ Năm, 17 tháng 11, 2011

Tạo một dự án nhỏ trong Common Lisp (Phần 2)

Language Switcher
Phần này sẽ trình bày cách tạo một dự án trong Common Lisp sử dụng tiện ích quicklisp.
http://xach.livejournal.com/278047.html

Lisp Hakers

Xach
Paul Khuong
Nklein

Thứ Tư, 16 tháng 11, 2011

Thứ Ba, 15 tháng 11, 2011

Tạo một dự án nhỏ trong Common Lisp (Phần 1)

Tôi thường gặp nhiều người hay bảo rằng họ không biết bắt đầu từ đâu để viết một chương trình đơn giản trong Common Lisp. Rõ ràng, cũng như các ngôn ngữ lập trình khác, Common Lisp cũng tổ chức chương trình thành các thư mục, tập tin chứa những chức năng chính. Trong phần này, tôi trình bày một cách tổng quát các bước chính để tạo dự án đơn giản nhất trong Common Lisp. Nội dung bài viết này được tham khảo từ Making a small Common Lisp project

Mở một chương trình soạn thảo
Đầu tiên, để soạn thảo chúng ta cần một phần mềm hỗ trợ soạn thảo văn bản như notepad, notepad++ hay emacs. Tạo các file .lisp để chứa mã lệnh chương trình. Thông thường, các file này nằm trong thư mục của dự án. Và dù dự án nhỏ, chúng ta cũng cần phải tạo vài file khác nhau để chứa các thủ tục khởi tạo và nạp những thư viện. Nếu sử dụng emacs, sau khi khởi động xong, bạn nhấn M-x slime để nạp sbcl và mở một file lisp mới.

Để đơn giản, giả sử tôi tạo một ứng dụng dùng để cho biết họ, tên đệm (lót), và tên khi nhập vào một tên đầy đủ. Tôi đặt tên cho ứng dụng này là nameanalysis và bắt đầu với một file /home/nvntung/lisp/nameanalysis/nameanalysis.lisp.

Định nghĩa các gói (packages)
Phần này liên quan đến việc tổ chức các gói của ứng dụng.
defpackage #:nameanalysis (:use #:cl))
(in-package #:nameanalysis)
Đoạn code trên định nghĩa một gói tên là nameanalysis, sử dụng gói cl (thường cl-user). Sau đó,di chuyển vào trong gói nameanalysis với lệnh (in-package #:nameanalysis.

Mẹo: Nhấn tổ hợp phím Ctrl c Ctrl c để biên dịch từng dòng lệnh (hoặc cụm lênh). Nếu muốn biên dịch toàn bộ thì Ctrl c Ctrl k

Bắt đầu code sau khi in-package.

Viết code cho chương trình
Cứ tiến hành khai báo biến, hằng, các hàm và những thứ linh tinh khác ở đây.

Soạn thảo mã lệnh Lisp với Emacs

Làm việc với Linux chắc chúng ta không quên emacs, một bộ soạn thảo cực kỳ mạnh mẽ và hiệu quả. Phần này sẽ giới thiệu cho các bạn một số mẹo vặt làm việc với nó.
Có nhiều ngôn ngữ sử dụng các dấu ngoặc để bắt đầu hoặc kết thúc một câu lệnh, chẳng hạn Scheme, Common Lisp, Clojure, hay XML. Nếu chúng ta cài đặt tính năng để emacs tự động highlight các dấu ngoặc (gồm có (, ), <, >) thì điều này cũng có hiệu lực cho các ngôn ngữ như nêu trên.

Lưu ý: Tất cả những trình bày ở dưới đều cấu hình trong file .emacs. Các tác giả [1] đã trình bày khá rõ ràng, tôi chỉ tóm tắt ở đây.

Cài đặt tiện ích làm sáng các dấu ngoặc

;; highlight text selection (on by default since emacs 23.2)
(transient-mark-mode 1)

;; make typing overwrite text selection
(setq delete-selection-mode 1) ; this turns on transient-mark-mode automatically


Hiển thị mode dấu ngoặc đơn

;; turn on highlight matching parens when cursor is on one
(show-paren-mode 1)



Tham khảo:
[1] http://xahlee.org/emacs/emacs_editing_lisp.html

Sách và các tài liệu liên quan đến Common Lisp

Một số tài liệu dưới dạng web được liệt kê như bên dưới:

  1. Practical Common Lisp
  2. Common Lisp Cookbook
  3. Common Lisp: A Gentle Introduction to Symbolic Computation
  4. Lisp: the programmable programming language
  5. Planet Lisp


Lisp


Bindings C for CL


Paste number 86550: Build font
CFFI - The Common Foreign Function Interface
32.3. The Foreign Function Call Facility
Tutorial-Loading - CFFI User Manual
Program Library HOWTO
ch03.html
defcfun - CFFI User Manual
VnExpress - Top sao Hàn có hình thể được thèm muốn nhất - Top sao Han co hinh the duoc them muon nhat


CLOS


A Brief Guide to CLOS
Chapter 16. Object Reorientation: Generic Functions


GUI in CL


CL-GTK2

cells-gtk


cells-gtk-devel
Common-Lisp.net CVS Repository - directory - cells-gtk: cells-gtk3
The cello-devel Archives
Bordeaux Threads project
iterate, the extensible iteration construct
Closer Project.
CLiki : trivial-garbage
CLiki : cells-gtk


ltk


LTK - a Lisp binding to the Tk toolkit
The ltk-user Archives
Ltk + Slime + Mac OSX 10.4 + (Clisp or SBCL or OpenMCL or CMUCL) - Rhinocerus


GTK-SERVER
Gtk-Server Wrapper for Common Lisp
The GTK-server - Interpreted GUI programming
The GTK-server Tutorial
Cello: a Common Lisp GUI




Lisp-Notes


Thumbnail Overview of FORMAT
Using COND, LET and LET*


Lisp Tutorial


Learning Lisp for CMPT 310
LISP Tutorial 1: Basic LISP Programming
LISP Tutorial 2: Advanced Functional Programming in LISP
LISP Tutorial Lecture 3: Data Abstraction
LISP Tutorial Lecture 4: Imperative Programming
Common Lisp list tutorial
syntax in Common Lisp


Practical Common Lisp


Chapter 01. Introduction: Why Lisp?
Chapter 02. Lather, Rinse, Repeat: A Tour of the REPL
Chapter 03. Practical: A Simple Database
Chapter 04. Syntax and Semantics
Chapter 05. Functions
Chapter 06. Variables
Chapter 07. Macros: Standard Control Constructs
Chapter 08. Macros: Defining Your Own
Chapter 09. Practical: Building a Unit Test Framework
Chapter 10. Numbers, Characters, and Strings
Chapter 11. Collections
Chapter 17. Object Reorientation: Classes


A Brief Guide to CLOS
A Concise Introduction to LISP
An Introduction and Tutorial for Common Lisp
An Introduction to the Common Lisp Object System
ANSI Common Lisp
Books in Lisp Programming
CL-Containers
CLiki : index
CLIM Table of Contents
CLISP - an ANSI Common Lisp Implementation
Common Lisp: A Gentle Introduction to Symbolic Computation
Common Lisp Games
Common Lisp Help and Information
Common Lisp HyperSpec (TM)
Common Lisp Interface Manager (CLIM)
Common Lisp the Language, 2nd Edition
Common Lisp - Wikibooks, collection of open-content textbooks
Condition Handling in the Lisp Language Family'' c by Kent Pitman (2001)
Features of Common Lisp
Frequently Asked Questions for comp.lang.lisp
Getting started in Common Lisp on Ubuntu.
GUI
How to install LISP?? - Ubuntu Forums
How to organize a project via package - comp.lang.lisp | Google Groups
Learning Common Lisp - Ubuntu Forums
Lisp Examples
Lisp FAQ
LispForum • Index page
Lisp Programming Examples
McCLiki : index
McCLIM - A powerful GUI toolkit for Common Lisp
McCLIM/opengl README opengl-frame-manager.lisp opengl-medium.lisp opengl-port.lisp opengl-x-frame-manager.lisp opengl-x-graft.lisp opengl-x-port-after.lisp opengl-x-port-before.lisp
newLISP - Home
Planet Lisp
Programmation Fonctionnelle et Symbolique 2008-2009
scheme-vs-common-lisp
Steel Bank Common Lisp
The Common Lisp Cookbook
The Common Lisp Directory
Welcome to Common-Lisp.net
XFig Version 3.2.5-alpha User Manual
Zach's Journal - Making a small Common Lisp project