Herhangi bir programlama dili matematikte olduğu gibi değişken kullanıyor mu?


11

Matematikte bir değişken, buraya herhangi bir sayı koyabileceğiniz anlamına gelir ve bir denklem yine de doğru olacaktır:

root(square(x)) = abs(x)

Programlama dillerinde bu böyle değildir: bir var değişebilir. Python'da:

y = (x**2)**.5
x *= 2
assert y == abs(x)

son satırdaki x aynı olmadığından bir istisna oluşturur.

Değişmez değişkenler kullanan programlama dilleri var mı?


5
Matematikte denklemlerin çoğu kimlik değildir. Örneğin, x ^ 2 + 5 = 6x, yalnızca x = 1 veya x = 5 olduğunda geçerlidir. Bazı "evrendeki" (tüm gerçek sayılar kümesi gibi) tüm değerler için geçerli olan denklemler, örneğin sin ( 2x) = 2 sin x cos x, kimlik olarak adlandırılır .
Andreas Rejbrand

4
matematikteki değişkenler = programlama dillerindeki değişkenler. Her zaman farklı isimlere sahip olmaları gerektiğini de düşündüm, çünkü matematikteki değişken hakkında önyargıları programlamaya getirdiklerinde çok fazla insan kafası karışıyor.
Yalan Ryan

1
Matematikteki değişkenlerin amacının programlamadakiyle aynı olmadığını düşünüyorum. Matematikte, değişkenler bilmek istediğiniz bilinmeyen bir değeri veya bir sonuç almak için bir değer koyduğunuz formüle bir yeri temsil eder. Ortak programlama dilleri için sadece ikinci durum mantıklıdır. İlk durumda Mathematica gibi bir yazılıma ihtiyacınız olacak.
Ekim'de Pagotti

Hayır. Herhangi bir sayıyı "x = 5" üzerine koymayı deneyin .

Yanıtlar:


6

"Herhangi bir programlama dili matematikte olduğu gibi değişken kullanıyor mu?" Başlıklı soruya cevap vermek için: C, C #, Java, C ++ ve diğer C tarzı dil değişkenleri matematikte kullanıldığı şekilde kullanır.

= Yerine == kullanmanız yeterlidir.

Eğer orijinalini alırsam

root(square(x)) = abs(x)

Sonra sözdizimi dışında herhangi bir değişiklik olmadan doğrudan C # çevirebilir. Math.Sqrt(Math.Pow(x,2)) == Math.Abs(x)

Bu, x karesi kullandığınız veri türü için maksimum değerden az olduğu sürece x'in herhangi bir değeri için true olarak değerlendirilir. (Java çok benzer olacak, ancak Math ad alanının biraz farklı olduğuna inanıyorum)

Derleyici, bir işlemin geri dönüşünü başka bir işleme atayamayacağımı bilecek kadar akıllı olduğundan bu sonraki bit C # 'da derlenemez.

Math.Sqrt(Math.Pow(x,2)) = Math.Abs(x)

Değişmezliğin bununla hiçbir ilgisi yoktur. Değeri değiştirilemez bir dilde atamanız gerekir ve belirli bir dilin bunu operatör olarak = kullanarak seçmeyi tamamlaması mümkündür.

Konuyu daha da ispatlayan bu döngü, x'in yasal değerlerini tüketip taşma istisnası elde edene kadar çalışır:

 while (Math.Sqrt(Math.Pow(x, 2)) == Math.Abs(x))
        {
            ++x;
            System.Console.WriteLine(x);
        }

Bu yüzden matematikçiler ödev için = kullanımından nefret ederler. Onları karıştırıyor. Bence bu sizi şaşırttı. Örneğini al

y = (x**2)**.5
x *= 2
assert y == abs(x)

Bunu cebire çevirdiğimde, şunu elde ederim:

abs (2x) = kök (x ^ 2)

Tabii ki 0 dışındaki değerler için doğru değildir. Değişmezlik, orijinal denklemin Sol Tarafı ve Sağ Tarafını değerlendirmek arasında fazladan adımlar eklediğinizde sizi yalnızca x değerini değiştirme hatasından kurtarır. Aslında değişmez var nasıl sen ifadeyi değerlendirir.


24

Haskell gibi tamamen işlevsel programlama dilleri değişmez değişkenleri zorunlu kılar. Değişkenler yerine tanımlayıcı olarak adlandırmayı seviyorum.


3
Saf olmayan fonksiyonel bir dil olan Erlang'da, değişkenler de değişmezdir.
sepp2k

Çok fazla Erlang bilmiyorum. Bunlar atomlar, değil mi? Erlang değişebilir değişken benzeri depolamaya izin veriyor mu?
Ionuț G. Stan

3
@Ionut: Hayır, Erlang atomları lisp ve ruby'de semboller olarak adlandırılır. İkinci sorunuzla ilgili olarak: Küresel (iyi, işlem başına), değişken bir karma harita olan işlem sözlüğüne sahiptir. Ancak bu benim deneyimimde çok nadiren kullanılır. Bunun dışında referans şeffaflığını kırmanın tek yolu mesaj iletmektir.
sepp2k

4
Hm, kendime biraz Erlang öğrenmeliyim :)
Ionuț G. Stan

bu sorulan soruya nasıl cevap veriyor?
gnat

5

=Programlama dillerinde kullanılan işaret yanıltıcıdır. <-, MOVEbunun yerine "mağaza" ve hatta COBOL kullanılmalıdır.

Buna ek olarak, Prolog math gibi bir değişken kullanır: Değişkenler değişemez ve Prolog motoru çözümlerin var olup olmadığını görmek için değişkenleri doldurur.

Ayrıca Curry, Haskell ve Prolog'un bir karışımıdır.


3

C, C ++ ve Objective-C, "const" tipi niteleyici ile işlev (ve yöntem) bağımsız değişkenleri ve diğer değişkenler (tanımlayıcılar) için değişmezlik belirtebilir.


3

Sınıfların güncellenmesine izin vermeyerek Python'daki değişmezliği simüle edebilirsiniz . Daha önce belirtildiği gibi, en saf fonksiyonel programlama dilleri değişmezliği zorunlu kılar. Clojure , JVM platformuna yeni bir ektir (Clojure bir LISP lehçesidir)

In Scala (aynı zamanda JVM dili) OO ve FP destek değişkenlerin bir birleştirici ile beyan valdeğişken değildir. Scala ifadesi ve OO / FP hibrid desteği, Mathematica'ya benzemesini sağlıyor . ( Akka , Scala ve Java'ya STM .. gibi Erlang OTP ve Clojure işlevlerini ekleyen bir çerçevedir.) LACASA , Scala'da nesne yeteneği disiplini uygulamak ve benzersiz nesne referansları sağlamak için tip sistemi ve programlama modeli ekler. ( kod ) ( teorik arka plan )

Java'da bildirilen bir değişken finaldeğişmezdir ve Google Guava gibi Java kütüphaneleri değişmez koleksiyon kütüphaneleri içerir. Java Stringhep de değişken değildir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.