FEEL¶
Karar modelindeki birçok ifade türüne standart, yürütülebilir anlamlar kazandırmayı amaçlayan, yeterince anlaşılır ifade dili (FEEL) şu özelliklere sahiptir:
- Yan etkisiz
- Sayılar, tarihler, dizeler, listeler ve bağlamlardan oluşan 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
-
boolean
-
gün ve saat süresi
-
yıl ve ay süresi
-
saat
-
tarih ve saat
-
liste
-
bağlam
Süre ve date/time veri türlerinin değişmez değer söz dizimi yoktur. Bu değerler, yerleşik bir işlev kullanılarak dize gösteriminden oluşturulmalıdır (dönüştürme işlevlerine bakın).
Bağlamlar, Listeler ve Nitelikli Adlar¶
Bağlam, bağlam girdileri adı verilen anahtar-değer çiftlerinden oluşan bir eşlemedir. Bağlamı sınırlamak için küme parantezleri, girdileri ayırmak için virgüller ve anahtar ile değeri ayırmak için iki nokta üst üste kullanılarak yazılır. Anahtar, bir dize veya ad olabilir. Değer bir ifadedir.
Listeyi sınırlamak için köşeli parantezler, liste öğelerini ayırmak için virgüller kullanılır. Tek elemanlı bir liste, tek öğesine eşittir. Tüm FEEL ifadeleri için örnek: "[e]=e".
Bağlamlar ve listeler, başka bağlamlara ve listelere başvurarak yönlü döngüsüz bir grafik oluşturabilir. Adlandırma yol temellidir. Bir bağlam girdisinin nitelikli adı (QN) "N1.N2 ... Nn" biçimindedir; burada N1, kapsam içindeki 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ü Anlambilimi¶
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 | listelerin uzunluğu aynı olmalı ve e1[n] = e2[n] eşit olmalıdır |
| bağlam | bağlam 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 |
| dize | 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 | tüm tarih ve saat bileşenleri eşit olmalıdır |
| saat | tüm saat 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çime dayanır; tamsayı veya kayan noktalı 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 veya tek tırnak içine alınmış karakter dizileri olabilir. Örneğin, "abc". Tüm dizeler UTF-8 kodlamasına göre 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 bulunmaz; ancak saat değerleri bir dize değişmez değeri ve time yerleşik işlevi kullanılarak ifade edilebilir.
Saat değerlerinde isteğe bağlı bir saat dilimi farkı da bulunabilir. Saat dilimi farkı belirtilmezse saat, yerel günün saati olarak yorumlanır.
Saat veri türü ayrıca saat, dakika, saniye ve isteğe bağlı saat farkı için sayı dizisinden oluşan bir bağlam sağlar.
tarih¶
FEEL'de saat değişmez değerleri bulunmaz; ancak saat değerleri bir dize değişmez değeri ve date yerleşik işlevi kullanılarak ifade edilebilir.
Tarih değerlerinde saat dilimi farkı yoktur ve UTC saat diliminde yorumlanırlar.
Tarih veri türü ayrıca yıl, ay ve ayın günü için sayı dizisinden oluşan bir bağlam sağlar.
tarih ve saat¶
FEEL'de saat değişmez değerleri bulunmaz; ancak saat değerleri bir dize değişmez değeri ve date time yerleşik işlevi kullanılarak ifade edilebilir.
Tarih ve saat değerlerinde isteğe bağlı bir saat dilimi farkı da bulunabilir. Saat dilimi farkı belirtilmezse saat, UTC saat diliminde yorumlanır.
Tarih ve saat veri türü ayrıca yıl, ay, gün, saat, dakika, saniye ve isteğe bağlı saat farkı için sayı dizisinden oluşan bir bağlam sağlar.
gün ve saat süresi¶
FEEL'de saat değişmez değerleri bulunmaz; ancak saat 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özdizimiyle ifade edilir.
Gün ve saat süresi veri türü ayrıca sürenin gün, saat, dakika ve saniyeleri için bir sayı dizisinden oluşan 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 bulunmaz; ancak saat 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özdizimiyle ifade edilir.
Gün ve saat süresi veri türü ayrıca sürenin yıl ve ayları için bir sayı dizisinden oluşan 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 parantez içindeki bir boole ifadesiyle filtrelenebilir. Köşeli parantez içindeki ifade, liste öğesine "item" adıyla başvurabilir. Liste girdileri bir bağlam olduğunda, filtre ifadesinde öğe girdilerine "item" öneki olmadan başvurulabilir item önekini kullanmadan. Örneğin;
1 2 | |
Kolaylık sağlamak için sol tarafında bağlam listesi bulunan "." işleciyle yapılan seçim, seçimlerden oluşan bir liste döndürür. Örneğin;
1 | |
Bağlam¶
Bağlam, bağlam girdileri olarak adlandırılan anahtar ve ifade çiftlerinden oluşan bir koleksiyondur. Anahtarlar dize değerleriyle eşlenir. context1 bağlamından key1 adlı bağlam girdisinin değerini seçme söz dizimi "context1.key1" şeklindedir.
m bağlamındaki 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}¶
Değilleme
Değilleme, yerleşik not işleviyle gerçekleştirilir. Değillemenin 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şleme¶
FEEL, bağlamlarda XML veri bağlamını destekler. XML ad alanları desteklenmez ancak öğelere önek kullanılarak 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 @ getirilir öğe değerine adıyla erişilir | |
| e$a : "v", e.c : "v1" | özniteliklerin önüne @ getirilir alt öğelere adlarıyla erişilir |
Yerleşik İşlevler¶
Birlikte çalışabilirliği artırmak için FEEL, yerleşik işlevlerden oluşan bir kitaplık içerir. Yerleşik işlevlerin söz dizimi ve anlamı, FEEL uyumlu bir uygulama için zorunludur.
Dönüştürme İşlevleri¶
FEEL, farklı türlerdeki değerler arasında birçok dönüştürmeyi destekler. Dizelerin tarihlere, saatlere ve sürelere dönüştürülmesi özellikle önemlidir. Tarih, saat veya süre için değişmez değer gösterimi yoktur. Ayrıca 1,000.00 gibi biçimlendirilmiş sayılar, gruplama ayırıcı ve ondalık ayırıcı 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) | yıl, ay, gün sayılardı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 değeridir; time bir saat değeridir | verilen tarihten (saat bileşeni varsa 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-saat değerine 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 saat değerine dönüştürür | time("23:59:00z") + duration("PT2M") = time("00:01:00@Etc/UTC") |
| time(from) | saat, tarih-saat | tarih bileşenlerini yok sayarak from değerini saat değerine dönüştürür | 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) | ikisi de tarih-saat değeridir | 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) | dize | boole dönüşümü | boolean("true") = true boolean("false") = false boolean(true) = true |
| not(negand) | boole | mantıksal değilleme | not(true) = false not(null) = null |
Dize İşlevleri¶
| Ad ve Parametreler | Parametre | Açıklama | Örnek |
|---|---|---|---|
| substring(string, start position, length?) | dize, sayı | start position konumundan başlayarak dizedeki 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) | dize | dizenin uzunluğunu döndürür | string length("foo") = 3 |
| upper case(string) | dize | büyük harfe dönüştürülmüş dizeyi döndürür | upper case("aBc4") = "ABC4" |
| lower case(string) | dize | küçük harfe dönüştürülmüş dizeyi döndürür | lower case("aBc4") = "abc4" |
| substring before (string, match) | dize, dize | string içindeki match ifadesinden önceki alt dizeyi döndürür | substring before("foobar", "bar") = "foo" substring before("foobar", "xyz") = "" |
| substring after (string, match) | dize, dize | string içindeki match ifadesinden sonraki alt dizeyi döndürür | substring after("foobar", "ob") = "ar" substring after("", "a") = "" |
| replace(input, pattern, replacement, flags?) | dize | düzenli ifade kalıbı eşleştirme ve değiştirme | replace("abcd", "(ab)|(a)", "[1=$1][2=$2]") = "[1=ab][2=]cd" |
| contains(string, match) | dize | dize match ifadesini içeriyor mu? | contains("foobar", "of") = false |
| starts with(string, match) | dize | dize match ifadesiyle başlıyor mu? | starts with("foobar", "fo") = true |
| ends with(string, match) | dize | dize match ifadesiyle bitiyor mu? | ends with("foobar", "r") = true |
| matches(input, pattern, flags?) | dize | input, düzenli ifade kalıbıyla eşleşiyor mu? | matches("foobar", "^fo*b") = true |
| string join(list, delimiter?) | liste, dize | liste öğelerinin delimiter ile birleştirildiği 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 alandaki 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 | (liste) karşılaştırılabilir öğeler | 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 | (liste) sayılar | 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 | (liste) sayılar | sayıların aritmetik ortalamasını döndürür | mean([1,2,3]) = 2 mean(1,2,3) = 2 |
| and(list) and(b1,..., bN), N >1 | (liste) Boole öğeleri | 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 | (liste) Boole öğeleri | 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, start position, length?) | liste, sayı1, sayı2 | listenin uzunluğunda (veya tüm) öğelerini döndürür; list[başlangıç konumu]konumundan başlayarak. İlk konum 1, son konum -1'dir | sublist([1,2,3], 1, 2) = [2] |
| append(list, item...) | liste, null dahil herhangi bir öğe | öğelerin eklendiği yeni listeyi 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 listeyi döndürür | concatenate([1,2],[3]) = [1,2,3] |
| insert before(list, position, newItem) | liste, sayı1, null dahil herhangi bir öğe | newItem öğesinin position konumuna eklendiği yeni listeyi döndürür | insert before([1,3],1,2) = [1,2,3] |
| remove(list, position) | liste, sayı1 | belirtilen konumdaki öğe çıkarılmış liste | remove([1,2,3], 2) = [1,3] |
| reverse(list) | liste | listeyi tersine çevir | reverse([1,2,3]) = [3,2,1] |
| index of(list, match) | liste, null dahil herhangi bir öğe | eşleşmeyi içeren liste konumlarının artan sıralı listesini 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 Dosyası Oluşturma | floor(n) | sayı | n değerinden küçük veya ona 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 ona eşit en küçük tam sayıyı döndürür | ceiling(1.5) = 2
ceiling(-1.5) = -1 |