title: What is define-struct in Racket and why are there no variables?
body: <p>In one of my CS courses at university we have to work with Racket. Most of my programming time before university I spent with PHP and Java and also JavaScript. I know Racket is a functional programming language, just like JavaScript (Edit: Of course it isn't. But I felt like I was doing 'functional' programming with it, which after seeing the answers, is a wrong perception.) But I still don't understand some fundamental characteristics of Racket (Scheme).</p>
  
  <ol>
  <li><p>Why are there no 'real' variables? Why is everything a function in Racket/Scheme? Why did the language designers not include them?</p></li>
  <li><p>What is <code>define-struct</code>? Is it a function? Is it a class? I somehow, because of my PHP background, always think it's a class, but that can't be really correct.</p></li>
  </ol>
  
  <p>My question here is I want to understand the concept of the language. I <strong>personally</strong> still think it's really strange and not like anything I worked with before, so my brain tries to compare it with JavaScript, but it just seems so different to me. Parallels/differences to JavaScript would help a lot!</p>