FEEL¶
Karar modelindeki birçok ifade türüne standart, yürütülebilir anlamlar kazandırmayı amaçlayan, kullanımı kolay bir ifade dili olan FEEL şu özelliklere sahiptir:
- Yan etkisiz
- Sayılar, tarihler, dizeler, listeler ve bağlamlar içeren basit veri modeli
-
Geniş bir kitle için tasarlanmış basit söz dizimi
-
Üç değerli mantık (true, false, null)
Karar tabloları veya iş bilgisi modelleri için FEEL ifadeleri yazarken bu sayfayı dil başvurusu olarak kullanın.
Veri Türleri¶
FEEL aşağıdaki veri türlerini destekler:
-
sayı
-
dize
-
boole
-
gün ve saat süresi
-
yıl ve ay süresi
-
saat
-
tarih ve saat
-
liste
-
bağlam
Süreler ve date/time veri türleri için değişmez değer söz dizimi yoktur. Yerleşik bir işlev kullanılarak dize gösteriminden oluşturulmaları gerekir (dönüştürme işlevlerine bakın).
Bağlamlar, Listeler, Nitelikli Adlar¶
Bağlam, bağlam girdileri adı verilen anahtar-değer çiftlerinin eşlemesidir. Bağlamı sınırlamak için süslü ayraçlar, girdileri ayırmak için virgüller ve anahtarı değerden ayırmak için iki nokta kullanılır. Anahtar bir dize veya ad olabilir. Değer bir ifadedir.
Liste, listeyi sınırlamak için köşeli ayraçlar, liste öğelerini ayırmak içinse virgüller kullanılarak yazılır. Tek öğeli liste, tek öğesine eşittir. Örneğin, tüm FEEL ifadeleri için "[e]=e".
Bağlamlar ve listeler birbirlerine başvurabilir ve böylece yönlü çevrimsiz bir grafik oluşturabilir. Adlandırma yol tabanlıdır. Bir bağlam girdisinin nitelikli adı (QN), "N1.N2 ... Nn" biçimindedir; burada N1, kapsamdaki bir bağlamın adıdır.
N1.N2 ... Nn yorumlanırken karşılaşılan iç içe listeler korunur. Örneğin,
1 2 3 | |
İç içe listeler, yerleşik flatten() işlevi kullanılarak düzleştirilebilir.
Değişmez Değer ve Veri Türü Anlamları¶
Eşitlik¶
Genel olarak karşılaştırılacak değerler aynı türde olmalıdır. Örneğin: FEEL("1" = 1) = null
| veri türü | e1 = e2 |
|---|---|
| liste | listeler aynı uzunlukta olmalı ve e1[n] = e2[n] birbirine eşit olmalıdır |
| bağlam | bağlamlar aynı anahtar kümesine sahip olmalı ve her e1.key = e2.key eşit olmalıdır |
| aralık | aralığın başlangıç ve bitiş noktaları aynı olmalıdır |
| sayı | sayıların değerleri eşit olmalıdır |
| string | dize değerleri büyük/küçük harf duyarlılığıyla eşleşmelidir |
| tarih | tüm tarih bileşenleri eşit olmalıdır |
| tarih ve saat | tarih ve saatin tüm bileşenleri eşit olmalıdır |
| saat | saatin tüm bileşenleri eşit olmalıdır |
| gün ve saat süresi | süre değeri eşit olmalıdır |
| yıl ve ay süresi | süre değeri eşit olmalıdır |
| boole | hem e1 hem de e2 true veya false olmalıdır |
sayı¶
FEEL sayıları ondalık biçimi temel alır; tamsayı veya kayan noktalı sayı veri türleri yoktur.
Değişmez değerler 10 tabanındaki rakamlardan ve isteğe bağlı bir ondalık ayırıcıdan oluşur. –INF, +INF ve NaN değişmez değerleri desteklenmez. -0 ile 0 arasında ayrım yoktur. number(from, grouping separator, decimal separator) yerleşik işlevi daha zengin bir değişmez değer biçimini destekler. Örneğin, FEEL(number("1.000.000,01", ".", ",")) = 1000000.01
NaN, positiveInfinity veya negativeInfinity için bir değer yoktur. Bunun yerine null kullanın.
| FEEL İfadesi | Değer |
|---|---|
| decimal(1,2) | 1.00 |
| .25 + 0.2 | 0.45 |
| 0.10 * 30.00 | 3.0000 |
| 1 + 3/2*2 - 2 ** 3 | -4.0 |
| 1/3 | 0.333333333 |
| decimal(1/3, 2) | 0.22 |
| 1 = 1.0000 | true |
| 1.01 / 2 | 0.505 |
| decimal(0.502, 2) | 0.50 |
| decimal(0.515, 2) | 0.52 |
| 1.0*10**3 | 1000.0 |
{#_1}¶
dize
Dize değişmez değerleri, çift tırnak veya tek tırnak içine alınmış karakter dizileri olarak yazılabilir. Örneğin, "abc". Tüm dizeler UTF-8 kodlamasıyla karşılaştırılır.
boole¶
Boole değişmez değerleri true ve false.
time¶
FEEL'de saat değişmez değerleri yoktur; ancak saat değerleri bir dize değişmez değeri ve time yerleşik işlevi kullanılarak ifade edilebilir.
Saat değerleri isteğe bağlı bir saat dilimi farkına da sahip olabilir. Saat dilimi farkı belirtilmezse saat, yerel gün saati olarak yorumlanır.
Saat veri türü ayrıca saat, dakika, saniye ve isteğe bağlı saat farkı için sayı dizilerinden oluşan bir bağlam sağlar.
tarih¶
FEEL'de saat değişmez değerleri yoktur; ancak tarih değerleri bir dize değişmez değeri ve date yerleşik işlevi kullanılarak ifade edilebilir.
Tarih değerlerinin saat dilimi farkı yoktur ve UTC saat diliminde yorumlanır.
Tarih veri türü ayrıca yıl, ay ve ayın günü için sayı dizilerinden oluşan bir bağlam sağlar.
tarih saat¶
FEEL'de saat değişmez değerleri yoktur; ancak tarih-saat değerleri bir dize değişmez değeri ve date time yerleşik işlevi kullanılarak ifade edilebilir.
Tarih-saat değerleri isteğe bağlı bir saat dilimi farkına da sahip olabilir. Saat dilimi farkı belirtilmezse saat, UTC saat diliminde yorumlanır.
Tarih-saat veri türü ayrıca yıl, ay, gün, saat, dakika, saniye ve isteğe bağlı saat farkı için sayı dizilerinden oluşan bir bağlam sağlar.
gün ve saat süresi¶
FEEL'de saat değişmez değerleri yoktur; ancak süre değerleri bir dize değişmez değeri ve gün ve saat süresi yerleşik işlevi kullanılarak ifade edilebilir. Süre biçimi ISO 8601 süre söz dizimine göre ifade edilir.
Gün ve saat süresi veri türü ayrıca sürenin gün, saat, dakika ve saniyeleri için sayı dizilerinden oluşan bir bağlam sağlar ve bu sayılar toplamları en aza indirilecek şekilde normalleştirilir. Örneğin: FEEL(duration("P0DT25H")) = P1DT1H
yıl ve ay süresi¶
FEEL'de saat değişmez değerleri yoktur; ancak süre değerleri bir dize değişmez değeri ve yıl ve ay süresi yerleşik işlevi kullanılarak ifade edilebilir. Süre biçimi ISO 8601 süre söz dizimine göre ifade edilir.
Gün ve saat süresi veri türü ayrıca sürenin yıl ve ayları için sayı dizilerinden oluşan bir bağlam sağlar ve bu sayılar toplamları en aza indirilecek şekilde normalleştirilir. Örneğin: FEEL(duration("P0Y13M")) = P1Y1M
Listeler ve Filtreler¶
Listeler değiştirilemez ve iç içe olabilir. Listenin ilk öğesine L[1] kullanılarak, son öğesine ise L[-1]kullanılarak erişilebilir. Listede öğe yoksa L[n] = null olur.
Listeler, köşeli ayraçlar içindeki bir boole ifadesiyle filtrelenebilir. Köşeli ayraçlar içindeki ifade, liste öğesine "item" adıyla başvurabilir. Liste girdileri bir bağlamsa, filtre ifadesindeki öğe girdilerine item önekini kullanmadan başvurulabilir. Örneğin:
1 2 | |
Kolaylık sağlamak için, sol tarafında bağlam listesi bulunan "." işleciyle yapılan seçim, seçimlerin listesini döndürür. Örneğin:
1 | |
Bağlam¶
Bağlam, bağlam girdileri adı verilen anahtar ve ifade çiftlerinden oluşan bir koleksiyondur. Anahtarlar dize değerlerine eşlenir. context1 bağlamındaki key1 adlı bağlam girdisinin değerini seçme söz dizimi "context1.key1" biçimindedir.
m bağlamından anahtar-değer çiftlerinin listesini almak için aşağıdaki yerleşik işlev kullanılabilir: get entries(m).
Aralık¶
FEEL, değer aralıkları için kısa söz dizimini destekler.
| FEEL İfadesi | Değer |
|---|---|
| 5 in ( <=5 ) | true |
| 5 in ( (5..10] ) | false |
| 5 in ( [5..10] ) | true |
| 5 in ( 4, 5, 6 ) | true |
| 5 in ( <5, >5 ) | false |
| 2012-12-31 in ( (2012-12-25..2013-02-14) ) | true |
{#_2}¶
Olumsuzlama
Olumsuzlama, yerleşik not işleviyle gerçekleştirilir. Olumsuzlamanın anlamı şöyledir:
| a | not(a) |
|---|---|
| true | false |
| false | true |
| diğer durumlarda | null |
İkili Mantık¶
İkili mantık "and" ve "or" anahtar sözcükleriyle ifade edilebilir. İkili mantığın anlamı şöyledir:
| a | b | a and b | a or b |
|---|---|---|---|
| true | true | true | true |
| true | false | false | true |
| true | diğer durumlarda | null | true |
| false | true | false | true |
| false | false | false | false |
| false | diğer durumlarda | false | null |
| diğer durumlarda | diğer durumlarda | null | null |
XML Veri Eşlemesi¶
FEEL, bağlamlarda XML veri bağlamını destekler. XML ad alanları desteklenmez ancak öneki kullanılarak öğelere erişilebilir. Tüm XML değerleri dize değerleri olarak yorumlanır.
| XML | bağlam girdisi | Açıklamalar |
|---|---|---|
| e : null | Boş öğe null değerine eşlenir. | |
| n$e : null | Ad alanları yok sayılır ve girdiye erişmek için önek kullanılabilir. | |
| e : "v" | Değer içeren tek öğe | |
| e : ["v1","v2"] | Değer içeren yinelenen öğe | |
| e$a : "v" e : "v1" | Özniteliklerin önüne @ öneki eklenir öğe değerine adıyla erişilir | |
| e$a : "v", e.c : "v1" | Özniteliklerin önüne @ öneki eklenir alt öğelere adıyla erişilir |
Yerleşik İşlevler¶
Birlikte çalışabilirliği geliştirmek için FEEL, yerleşik işlevlerden oluşan bir kitaplık içerir. FEEL ile uyumlu bir uygulama için yerleşik işlevlerin sözdizimi ve anlamı gereklidir.
Dönüştürme İşlevleri¶
FEEL, farklı türlerdeki değerler arasında birçok dönüştürmeyi destekler. Özellikle dizelerin tarihlere, saatlere ve sürelere dönüştürülmesi önemlidir. Tarih, saat veya süre için değişmez bir gösterim yoktur. Ayrıca 1,000.00 gibi biçimlendirilmiş sayılar, gruplama ayıracı ve ondalık ayıracı belirtilerek bir dizeden dönüştürülmelidir.
| Ad ve Parametreler | Parametre | Açıklama | Örnek |
|---|---|---|---|
| date(from) | tarih dizesi | from değerini tarihe dönüştürür | date("2012-12-25") – date("2012-12-24") = duration("P1D") |
| date(from) | tarih ve saat | from değerini tarihe dönüştürür (saat bileşenlerini null olarak ayarlar) | date(date and time("2012-12-25T11:00:00Z")) = date("2012-12-25") |
| date(year, month, day) | year, month ve day sayıdır | Yıl, ay ve gün bileşen değerlerinden bir tarih oluşturur | date(2012, 12, 25) = date("2012-12-25") |
| date and time(date, time) | date bir tarih veya tarih-saat; time ise bir saattir | Verilen tarihten (saat bileşenlerini yok sayarak) ve verilen saatten bir tarih-saat oluşturur | date and time ("2012-12-24T23:59:00") = date and time (date("2012-12-24”), time(“T23:59:00")) |
| date and time(from) | tarih-saat dizesi | from değerini tarih ve saate dönüştürür | date and time("2012-12-24T23:59:00") + duration("PT1M") = date and time("2012-12- 25T00:00:00") |
| time(from) | saat dizesi | from değerini saate dönüştürür | time("23:59:00z") + duration("PT2M") = time("00:01:00@Etc/UTC") |
| time(from) | saat, tarih ve saat | from değerini saate dönüştürür (tarih bileşenlerini yok sayarak) | time(date and time("2012-12-25T11:00:00Z")) = time("11:00:00Z") |
| time(hour, minute, second, offset) | hour, minute ve second sayıdır; offset gün ve saat süresi ya da null değeridir | Verilen bileşen değerlerinden bir saat oluşturur | time(“T23:59:00z") = time(23, 59, 0, duration(“PT0H”)) |
| number(from, grouping separator, decimal separator) | dize, dize, dize | from değerini sayıya dönüştürür | number("1 000,0", " ", ",") = number("1,000.0", ",", ".") |
| string(from) | null olmayan | from değerini dizeye dönüştürür | string(1.1) = "1.1" string(null) = null |
| duration(from) | süre dizesi | from değerini gün ve saat ya da yıl ve ay süresine dönüştürür | date and time("2012-12-24T23:59:00") - date and time("2012-12-22T03:45:00") = duration("P2DT20H14M") duration("P2Y2M") = duration("P26M") |
| years and months duration(from, to) | her ikisi de tarih ve saattir | from ile to arasındaki yıl ve ay süresini döndürür | years and months duration( date("2011-12-22"), date("2013-08-24") ) = duration("P1Y8M") |
Boole İşlevleri¶
| Ad ve Parametreler | Parametre | Açıklama | Örnek |
|---|---|---|---|
| boolean(from) | string | boole dönüştürmesi | boolean("true") = true boolean("false") = false boolean(true) = true |
| not(negand) | boole | mantıksal olumsuzlama | not(true) = false not(null) = null |
Dize İşlevleri¶
| Ad ve Parametreler | Parametre | Açıklama | Örnek |
|---|---|---|---|
| substring(string, start position, length?) | dize, sayı | Dizede start position konumundan başlayarak length kadar (veya tüm) karakteri döndürür. İlk konum 1, son konum -1'dir | substring("foobar",3) = "obar" substring("foobar",3,3) = "oba" substring("foobar", -2, 1) = "a" |
| string length(string) | string | Dizenin uzunluğunu döndürür | string length("foo") = 3 |
| upper case(string) | string | Büyük harfe dönüştürülmüş dizeyi döndürür | upper case("aBc4") = "ABC4" |
| lower case(string) | string | Küçük harfe dönüştürülmüş dizeyi döndürür | lower case("aBc4") = "abc4" |
| substring before (string, match) | dize, dize | Dizede match eşleşmesinden önceki alt dizeyi döndürür | substring before("foobar", "bar") = "foo" substring before("foobar", "xyz") = "" |
| substring after (string, match) | dize, dize | Dizede match eşleşmesinden sonraki alt dizeyi döndürür | substring after("foobar", "ob") = "ar" substring after("", "a") = "" |
| replace(input, pattern, replacement, flags?) | string | Düzenli ifade desen eşleştirme ve değiştirme | replace("abcd", "(ab)|(a)", "[1=$1][2=$2]") = "[1=ab][2=]cd" |
| contains(string, match) | string | Dize match değerini içeriyor mu? | contains("foobar", "of") = false |
| starts with(string, match) | string | Dize match ile başlıyor mu? | starts with("foobar", "fo") = true |
| ends with(string, match) | string | Dize match ile bitiyor mu? | ends with("foobar", "r") = true |
| matches(input, pattern, flags?) | string | Girdi, düzenli ifade deseniyle eşleşiyor mu? | matches("foobar", "^fo*b") = true |
| string join(list, delimiter?) | liste, dize | Liste öğelerinin delimiter ile birleştirilmesiyle oluşan dizeyi döndürür | string join(["a","b","c"], ",") = "a,b,c" |
| split(string, delimiter) | dize, dize | delimiter ile bölünmüş dizelerden oluşan listeyi döndürür | split("a,b,c", ",") = ["a","b","c"] |
Liste İşlevleri¶
| Ad ve Parametreler | Parametre | Açıklama | Örnek |
|---|---|---|---|
| list contains(list, element) | liste, null dahil anlamsal alanadındaki herhangi bir öğe | Liste element öğesini içeriyor mu? | list contains([1,2,3], 2) = true |
| count(list) | liste | Listenin boyutunu döndürür | count([1,2,3]) = 3 |
| min(list) min(c1,..., cN), N >1 max(list) max(c1,..., cN), N >1 | (karşılaştırılabilir öğelerden oluşan) liste | en küçük öğeyi döndürür en büyük öğeyi döndürür | min([1,2,3]) = 1 min(1,2,3) = 1 max([1,2,3]) = 3 max(1,2,3) = 3 |
| sum(list) sum(n1,..., nN), N >1 | (sayıların) listesi | sayıların toplamını döndürür | sum([1,2,3]) = 6 sum(1,2,3) = 6 |
| mean(list) mean(n1,..., nN), N >1 | (sayıların) listesi | sayıların aritmetik ortalamasını (ortalamasını) döndürür | mean([1,2,3]) = 2 mean(1,2,3) = 2 |
| and(list) and(b1,..., bN), N >1 | (Boolean öğelerinin) listesi | Herhangi bir öğe false ise false, tüm öğeler true ise true, aksi hâlde null döndürür | and([false,null,true]) = false and(false,null,true) = false and([]) = true and(0) = null |
| or(list) or(b1,..., bN), N >1 | (Boolean öğelerinin) listesi | Herhangi bir öğe true ise true, tüm öğeler false ise false, aksi hâlde null döndürür | or([false,null,true]) = true or(false,null,true) = true or([]) = false or(0) = null |
| sublist(list, başlangıç konumu, uzunluk?) | liste, sayı1, sayı2 | listenin uzunluk kadar (veya tüm) öğesini döndürür; liste[başlangıç konumu]konumundan başlayarak. İlk konum 1, son konum -1 | sublist([1,2,3], 1, 2) = [2] |
| append(list, item...) | liste, null dâhil herhangi bir öğe | öğelerin eklendiği yeni bir liste döndürür | append([1], 2, 3) = [1,2,3] |
| concatenate(list...) | liste | bağımsız değişkenlerin birleştirilmesiyle oluşan yeni bir liste döndürür | concatenate([1,2],[3]) = [1,2,3] |
| insert before(list, position, newItem) | liste, sayı1, null dâhil herhangi bir öğe | newItem öğesinin konuma eklendiği yeni bir liste döndürür | insert before([1,3],1,2) = [1,2,3] |
| remove(list, position) | liste, sayı1 | belirtilen konumdaki öğenin kaldırıldığı liste | remove([1,2,3], 2) = [1,3] |
| reverse(list) | liste | listeyi tersine çevirir | reverse([1,2,3]) = [3,2,1] |
| index of(list, match) | liste, null dâhil herhangi bir öğe | eşleşmenin bulunduğu liste konumlarını artan sırayla içeren bir liste döndürür | index of([1,2,3,2],2) = [2,4] |
| union(list...) | liste | yinelenenleri kaldırarak birleştirir | union([1,2],[2,3]) = [1,2,3] |
| distinct values(list) | liste | yinelenenleri kaldırma | distinct values([1,2,3,2,1] = [1,2,3] |
| flatten(list) | liste | iç içe listeleri düzleştirir | flatten([[1,2],[[3]], 4]) = [1,2,3,4] |
Sayısal işlevler¶
| Ad ve Parametreler | Parametre | Açıklama | Örnek |
|---|---|---|---|
| decimal(n, scale) | sayı, sayı1 | n değerini belirtilen ölçekle döndürür | decimal(1/3, 2) = .33 decimal(1.5, 0) = 2 decimal(2.5, 0) = 2 |
İlgili Sayfalar¶
- Karar Modelleri
- Karar Tablosu
- Komut dizisi | floor(n) | sayı | n değerinden küçük veya n'ye eşit en büyük tam sayıyı döndürür | floor(1.5) = 1
floor(-1.5) = -2 | | ceiling(n) | sayı | n değerinden büyük veya n'ye eşit en küçük tam sayıyı döndürür | ceiling(1.5) = 2
ceiling(-1.5) = -1 |