Placeholder Image

字幕列表 影片播放

  • Lisp is a language that was invented back in the 1950s.

  • It is capable of doing functional programming, but it's actually

  • often misattributed as being a functional programming language.

  • In general, it's a so-called metaprogramming language, or a symbolic programming language.

  • It can be used for any sort of task that you might want do. It's a general-purpose language, Lisp.

  • It's been said that learning Lisp just helps you be a better programmer in general.

  • It opens up a lot of different ways of thinking that are sort of

  • locked away in languages like Java or C++ or what have you.

  • It has a few interesting ideas, such as this idea of homoiconicity,

  • where the language itself is written as a data structure that you can represent in that language..

  • This idea of metaprogramming, where not only are you programming in the language to solve a problem,

  • but you can program the language itself. You can change the structure of the language itself

  • to make it more suitable for a particular application.

  • And even if it was just for learning those concepts, you'd become a better programmer in other languages.

  • Nonetheless, it still remains a language... Common Lisp, in particular

  • remains a language that's very, very good at solving modern real-world problems.

  • I actually would draw an analogy to physics a little bit.

  • Like, good ideas, ideas that are fundamentally good are usually ones that stand the test of time.

  • Now, computer science and computer programming is not a very old art, so to speak.

  • It's, you know, less than a century old.

  • However, there are lots of theories in physics, for instance, that were sensible,

  • they allowed you to make predictions. For example, the sun going around the Earth.

  • It seems reasonable. You see it. But there's a kernel of an idea later that the Earth goes around the sun.

  • And that is a physical theory that, one, turned out to be true, but also stands the test of time.

  • There are good ideas in it that are fundamentally good.

  • And so I think that just the fact that Lisp started in the 1950s and still has something,

  • still has some kernel of an idea that's good, I think makes it worth learning, even if it's not used day to day.

  • (off) You do use it day to day, don't you? (Smith) Yes.

  • So, Lisp, even still, going back to this kernel of an idea, is good at building a language that I want.

  • I can't think of anything that's better than using a programming language that allows me to build the language that I need to express my problem.

  • The stuff that I work on day to day is quantum computing, where there isn't a lot of literature

  • on how to wrangle the problems that come up in quantum computing.

  • Quantum computing uses quantum mechanics, which is a very, very different mathematical language than just addition of numbers, for instance.

  • It is a very strange world, where things have all different types of rules.

  • So, modern programming languages don't support expressing these constructs in a very fluid way.

  • Often, I need to sort of build my own sort of language in order to express solutions to problems that I'm having.

  • Now, you can do this in a language like C++ or Java. You can build your own parser, you can build your own

  • compiler, you can build all of the things you need just to be able to write solutions to problems.

  • But in Lisp, it allows you to grow the language ever so slightly in a very easy way,

  • so that in Lisp directly I can express these new constructs.

  • And it's very helpful for these types of new domains.

  • We're actually extending the syntax of the language.

  • So, one example that I like to bring up is, back in the days of programming Assembly,

  • if you wanted to do something like a "for" loop, you wrote down this structure where you'd have this explicit

  • "jump" statement, and then you'd have a separate counter somewhere,

  • and it's all just a bunch of lines of Assembly.

  • Nowhere in the Assembly code are you actually saying, like, "for i from 1 to 10", or something like that,

  • but you know the concept is there. You know as the programmer what you mean by these instructions is a "for" loop.

  • What Lisp does is allow you to take that idea of a "for" loop and actually syntactically be able to write a "for" loop.

  • So it's not just a library of functions. It's actually new syntax and new functionality in the language.

  • (off) But it all does come down to Assembly in the end, doesn't it? (Smith) Yes, absolutely.

  • Yeah, it all gets compiled to Assembly in the end.

  • (off) So this is a way of organizing your thoughts as a programmer. (Smith) Correct, yes.

  • That's, I think, ultimately what it's optimizing for, allowing you the programmer to organize your thoughts.

  • Most of the time in programming is spent thinking, so that's the progress that I want to optimize in programming.

  • Not necessarily the efficiency of the program, although you can do that, and other things.

  • It's being able to even get the solution to the problem out on paper or on the screen in the first place.

  • (off) And would you say you're faster doing it this way?

  • (off) There might be somebody out there going, "Yeah, I could do that in Haskell, I could do that in C."

  • (Smith) So, instead of taking my word for it, we did this little program where I work where we had

  • college students, interns, come in and try the language, then try to use it for solving some of these quantum problems.

  • And the first reaction is, like, "Whoa, there are lots of parentheses."

  • If you look at Lisp code, there are lots of parentheses. And then it's... Well, the documentation is sometimes

  • a little bit shaky in certain places.

  • But once they kind of got through that first bit of the learning curve,

  • the feedback that I got is that they could think about their problems in a more fundamental,

  • or more structural fashion, that the language itself wasn't getting in the way of solving their problems.

  • It's that now they could express what they think in a more direct fashion, without so much of an impedance mismatch.

  • Fortunately, Lisp was originally defined in, like, half a page of code. Like, the entire language.

  • And in that page of code, they had very few concepts that bring to light all of these things that I'm discussing.

  • Namely, the notion of S expressions, which is how the Lisp language itself is built, how you write it.

  • And following that, this notion of macros and metaprogramming, how we can extend the language.

  • And I think these two things really bring to light how all this stuff works.

  • The special thing about this is that we can interpret it in two ways.

  • It can be looked at as code. It looks like we're doing 1+2*3.

  • But it can also be looked at as data. Remember that in Lisp we write out a list using parentheses, here.

  • We write out symbols just as their names here. So in Lisp, actually have this explicit bridge...

Lisp is a language that was invented back in the 1950s.

字幕與單字

單字即點即查 點擊單字可以查詢單字解釋

A2 初級

Lisp,量子程序員的選擇 - Computerphile (Lisp, The Quantum Programmer's Choice - Computerphile)

  • 5 1
    林宜悉 發佈於 2021 年 01 月 14 日
影片單字