S-ifadesi

Bir S-ifadesi (veya sembolik ifade ), bir programın metin biçiminde veri veya ifadelerinin temsiline yönelik bir sözleşmedir. S-ifadeleri, Scheme ve DSSSL (en) dahil olmak üzere Lisp dil ailesinde ve IMAP veya John McCarthy'nin Ortak İş İletişimi Dili ( CBCL ) gibi iletişim protokollerinde bir metal dil olarak kullanılır . Sözdiziminin ve desteklenen veri türlerinin ayrıntıları dile bağlı olarak farklılık gösterir, ancak en yaygın özellik, parantezli önek gösteriminin kullanılmasıdır (sevgiyle Polish Notation of Cambridge adıyla bilinir ).  

Lisp ile İlişki

Lisp'de S-ifadeleri hem kod hem de veri için kullanılır. S-ifadeleri orijinal olarak , programcılar tarafından kullanılan ( somut sözdizimi ) Makine M-cümleleri  (in) temsilleri olarak tasarlanmıştır ; ancak Lisp programcıları, varsayılan gösterim olarak hemen S-ifadelerini kullandılar.

S-ifadeleri sayılar gibi basit nesneler olabilir, sıfır ve t dahil Lisp atomları , not edilmiş çiftler (x. Y). Listeler çiftlerle oluşturulabilir, örneğin (1. (2. (3. Nil))) ve bunlar da yazılabilir (1 2 3) .

Bu nedenle program kodu, parantez içinde gösterimle birlikte s-ifadeleri ile yazılabilir.

Lisp'deki örnek:

(defun factorial (x) (if (zerop x) 1 (* x (factorial (1- x)))))

Şema Örneği:

(define (factorial x) (if (= x 0) 1 (* x (factorial (- x 1)))))

Lisp sözdizimi için S-ifadelerinin seçimi, bu dil ailesinin güçlü makro sistemler sunmasına izin vererek, dilin anlamını (özel operatörler, kod çözümleyicileri, vb. Eklemek), spesifikasyonunu etkilemeden veya değiştirmeden genişletmeyi mümkün kılar. derleyici (veya yorumlayıcı ). Bu, M-İfadelerinin neden fazla kullanılmadığını açıklar.

XML ile raporlar

S-ifadeleri aynı problemi XML ile çözer , diyelim ki , Çok daha hafif ve kırk yıl ileride. S-ifadeleri bu nedenle kod için ( Lisp'de olduğu gibi ) ve aynı zamanda veriler için bir format olarak kullanılabilir . Ancak farklı öğelerin etiketlenmesine izin vermezler ( JSON veya YAML gibi diğer XML rakiplerinin aksine ). Lisp programı:

(lambda (x) (* 2 x))

XML olarak aşağıdaki gibi yazılabilir ( http://homepages.inf.ed.ac.uk/wadler/language.pdf adresinden ):

<?xml version="1.0"?> <lambda-term> <variables-list> <var>x</var> </variables-list> <expr> <application> <expr><const>*</const></expr> <arguments-list> <expr><const>2</const></expr> <expr><var>x</var></expr> </arguments-list> </application> </expr> </lambda-term>

Dış bağlantılar