Check our Terms and Privacy Policy.

低学年児童のためのプログラム教育教材の作成とそのための実践:第一版 (2nd)

プログラミングという概念は、手続きを書くことと同義ではありません。 プログラムそのものの概念の把握から、プログラミングの考え方の多様性を理解できる教材を目指します。 主に小道具を使うアンプラグドな環境においてパズルやゲームを題材としたものを想定しています。

現在の支援総額

4,000

0%

目標金額は2,080,000円

支援者数

1

募集終了まで残り

終了

このプロジェクトは、2017/08/02に募集を開始し、 2017/08/30に募集を終了しました

このプロジェクトを見た人はこちらもチェックしています

低学年児童のためのプログラム教育教材の作成とそのための実践:第一版 (2nd)

現在の支援総額

4,000

0%達成

終了

目標金額2,080,000

支援者数1

このプロジェクトは、2017/08/02に募集を開始し、 2017/08/30に募集を終了しました

プログラミングという概念は、手続きを書くことと同義ではありません。 プログラムそのものの概念の把握から、プログラミングの考え方の多様性を理解できる教材を目指します。 主に小道具を使うアンプラグドな環境においてパズルやゲームを題材としたものを想定しています。

このプロジェクトを見た人はこちらもチェックしています

2017/08/02 17:00

本文で紹介した “lambda” と “map” について簡単に説明します。

まず、例を見てみます。
最初の例は、lisp系の “gauche” というschemeの実装での例です。

| gosh> (map (lambda (x) (* x 2)) '(1 2 3))
| (2 4 6)

最初の“gosh>” はプロンプトで、その後が例の本体です。
2行目がその出力です

次にPython3での例です。これはスクリプト・ファイルに書いてみました。

| print(list(map(lambda x: x * 2, [1,2,3])))

これをex1.pyというような名前にして、実行してみます。

| $ python3 ex1.py

すると、このような結果が得られます。

| [2, 4, 6]

おわかりのとおり、同じ結果が出てきています。

どちらも “map” という、「関数を引数に取る関数 (高階関数)」に、 “lambda” という無名関数として示される処理と、その “lambda” に与える引数が示されています。

gaucheもpython3も “map” では、“lambda” も与える引数も“map” の引数になっています。この点についての見やすさを考えると、Python3はちょっと読みにくいかもしれません。

この程度の例では、ループを使ってもかまいませんが、より複雑な処理も可能であることは説明はいらないかと思います。

Python3の場合はともかく、schemeの場合、 “lambda” 自体を合成、あるいは生成したり、またPython3の場合もschemeの場合も、引数を合成、あるいは生成したりということが可能です。
Python3の場合、おそらくよくあるのは “range(10)" のようにして引数を生成するような場合でしょうか。

「関数を引数にとる」ということ自体は、C言語でもポインタを使うことで可能です。
両者の違いは、C言語では引数になる関数もかならず関数として定義されていなければならないという点でしょうか。
gaucheにしてもPython3にしても、 “lambda” ではなく、定義されている関数名を書いてもかまいません。

では、関数を引数に取れるということの便利さは、おそらく説明はいらないかと思います。ですが、無名関数はどう便利なのか。それは、またの機会に紹介したいと思います。

シェアしてプロジェクトをもっと応援!