پردازش آرایه در زبان های فانکشنال

با سلام و درود خدمت دوستان .
فرض کنید متنی مثل زیر داریم :
What you “imagine” you create
در یک زبان فانکشنال مثلا اسکالا یا الکسیر چه جوری میتونم این متن رو پردازش کنم و کلمه imagine رو داخل مثلا تگ html قرار بدم ؟‌
یا مثلا یک ارایه رو در نظر بگیرید که قراره پردازش بشه و هربار مثلا به کاراکتر نقطه برخورد کردم بقیه متن رو تا جایی که دوباره نقطه باشه بخونم و هرچی بین این دو نقطه هست رو در بیارم ؟ چون متغیر mutable در زبان های فانکشنال نداریم نمیدونم چجوری این کارها قراره بشه ؟؟ راه حل خاصی هست یا باید کل آرایه رو هربار برای پردازش خوند ؟

Mutable بودن یا نبودن اینجا چه تفاوتی ایجاد میکنه؟ و چرا immutability باعث میشه آرایه دفعات کمتر یا بیشتری خونده بشه؟

1 Like

من ربط شو متوجه نشدم چرا immutability می تونه مشکل ساز بشه خوب متن رو استخراج می کنید و در یک متغییر جدید می زارید یا متغییر (هرچی اسمش هست :smiley:) رو دوباره ارزش گذاری می کنید

1 Like

میشه خروجی که می خواهی بنویسی

2 Likes

بله سام عزیز حتما :
What you “imagine” you create تبدیل بشه به :

What you <strong>imagine</strong> you create

البته در صورتی که " اول وجود داشته باشه

نمیدونم شایدم چون با ذهنیت mutable نگاه میکنم و عادت داشتم اینجوری مسائل رو حل کنم فکر میکنم اینطوری هست اما هنوزم دقیق نمیدونم فانکشنال برای مواردی مثل زیر چه راه حلی داره :

txt = "this is @[email protected] string"
first_pos = None 
for i,ch in enumerate(txt):
	if ch == '@':
		first_pos = i

@shahryarjb

منظورت این هست؟

text_you_want 
|> String.split( " ") 
|> Enum.find(fn x -> x == "imagine" end)

آخر می تونی بندازی تو آرایه یا فانکشن جدید یا یک استیت درست کنی در جن سرور و … ماژول های دیگه هم هستند که سرچ تو متن هم دارند این یک نمونه

1 Like

Screenshot%20from%202019-11-23%2019-59-46

راه حل های ساده اینطوری خیلی زیادن فقط نمیدونم اینجوری از راه درستش هست یا نه ؟ مثلا تو مثال بالا اگر کاربر @@ رو نوشته باشه ولی ## یادش رفته باشه چی میشه ؟ خب اینجا باید اول مطمئن شد ## وجود داره بعد @@ این رو تبدیل به تگ html کرد و اینجاست که نمیدونم باید چیکار کنم وگرنه اینطوری راه خیلی زیاده که حتی نمیخواد تبدیل به لیست کنی . امیدوارم منظورم رو متوجه شده باشی .

به نمونه ای از توییتر توجه کن
36%20pm

یادش بره چرا باید مهم باشه می تونید آخرینشو بگیری همین تازه رجکس هم می تونی بزنی تازه در الیکسیر کتابخانه های خوبی برای کار با html هستند که نیازی نیست دستی ویرایش کنی در کل متن

یک نمونش


هست که خیلی خوب بود در یک پروژه ای در یک سال پیش فکر کنم ازش استفاده کردم خیلی خیلی خوب بود

برای @@ پشت هم در توییتر هیچ کاری نمی کنه تا کاربر نیاد @ فقط یک بار نزنه اون تگش آبی نمی شه. با کمی js در موقع ارسال موضوع به وسیله کاربر می تونی به راحتی در تصحیح رفتار اون هم کمک کنی

1 Like

در سکالا

"what you imagine you create".replace("imagine","<strong> imagine </strong>")
def strongify(str: String): String = {
  str.replace("imagine", "<strong> imagine </strong>") 
}
3 Likes