Ana içeriğe geç

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
    [{a: [{b: 1}, {b: [2.1, 2.2]}]}, {a: [{b: 3}, {b: 4}, {b: 5}]}].a.b =
    [[{b: 1}, {b: [2.1, 2.2]}], [{b: 3}, {b: 4}, {b: 5}]].b =
    [[1, [2.1, 2.1]],[ 3, 4, 5]]

İç 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
    [1, 2, 3, 4][item > 2] = [3, 4]
    [{x:1, y:2}, {x:2, y:3}][x=1] = {x:1, y: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
    [{x:1, y:2}, {x:2, y:3}].y = [2,3]

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.
v e : "v" Değer içeren tek öğe
v1v2 e : ["v1","v2"] Değer içeren yinelenen öğe
v1 e$a : "v"

e : "v1"
Özniteliklerin önüne @ öneki eklenir

öğe değerine adıyla erişilir
v1

v1

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
  • 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 |