ページ「Xamarin.Mac/CGImageをファイルに保存する」と「真正末尾再帰」の間の差分

提供: MonoBook
< Xamarin.Mac(ページ間の差分)
ナビゲーションに移動 検索に移動
 
imported>Administrator
 
1行目: 1行目:
== 実装1 ==
+
'''真正末尾再帰'''とは、[[末尾再帰]]を利用することで確実に[[末尾再帰最適化]]が行われることが保証される[[プログラミング言語]]のことである。単に「真正」「真正的」などと呼ばれることもある。
Xamarin.Mac 2.0系の場合はCGImageDestination.Createのまま。
 
Xamarin.Mac 1.0系の場合はCGImageDestination.FromUrlに変更する。
 
<source lang="csharp">
 
using System;
 
using Foundation;
 
using CoreGraphics;
 
using ImageIO;
 
  
namespace Library
+
== 概要 ==
{
+
[[末尾再帰]]を利用することで確実に[[末尾再帰最適化]]が行われるため、末尾再帰をいくら使用しても[[コールスタック]]などの[[リソース]]を食いつぶすなどの挙動がなく、結果として[[再帰]]の呼び出し回数に制限がない状態をいう。
    public static class CGImageExtensions
 
    {
 
        public static bool Save(this CGImage cgImage, string path, string typeIdentifier)
 
        {
 
            using (var url = NSUrl.FromFilename(path))
 
            using (var dst = CGImageDestination.Create(url, typeIdentifier, imageCount:1))
 
            {
 
                if (dst == null)
 
                {
 
                    return false;
 
                }
 
  
                dst.AddImage(cgImage);
+
また、このような[[末尾再帰最適化]]が必ず行われることが保証されている[[処理系]]([[プログラミング言語]])を指す。
  
                return dst.Close();
+
[[正格評価]]の[[関数型プログラミング言語]]を名乗る[[言語]]であれば、ほぼ真正末尾再帰であると思ってよい。ただし[[正格評価]]の代表格である[[LISP]]だけは何故か真正末尾再帰ではない。その派生品である[[Scheme]]などでは真正になっている。
            }
 
        }
 
    }
 
}
 
</source>
 
 
 
引数typeIdentifierはMobileCoreServices.UTTypeに定義されている定数文字列群を指定する。
 
拡張子で自動判別するようにしてMobileCoreServices.UTTypeを無視するようにした方が直感的かもしれない。
 
<source lang="csharp">
 
        cgImage.Save(save, MobileCoreServices.UTType.PNG);
 
</source>
 
  
 
== 関連項目 ==
 
== 関連項目 ==
*[[MonoMac/NSImageをファイルに保存する]]
+
* [[再帰]]
*[[Xamarin.Mac/NSViewの描画内容をファイルに保存する]]
+
* [[末尾再帰]]
*[[Xamarin.Mac/CoreGraphicsの基本的な使い方]]
+
* [[末尾再帰最適化]]
*[[Xamarin.Mac/動画から静止画を抽出する]]
 
*[[Xamarin.Mac/スクリーンキャプチャを撮る]]
 
*[[Xamarin.Mac/CGImageをNSImageに変換する]]
 
*[[Xamarin.Mac/NSOpenGLViewを使う]]
 
*[[Xamarin.Mac/効果音を再生する]]
 
  
 
== 参考文献 ==
 
== 参考文献 ==
51行目: 17行目:
  
 
{{stub}}
 
{{stub}}
 
[[category: Xamarin.Mac]]
 
[[category: Core Graphics]]
 

2016年3月2日 (水) 05:13時点における版

真正末尾再帰とは、末尾再帰を利用することで確実に末尾再帰最適化が行われることが保証されるプログラミング言語のことである。単に「真正」「真正的」などと呼ばれることもある。

概要

末尾再帰を利用することで確実に末尾再帰最適化が行われるため、末尾再帰をいくら使用してもコールスタックなどのリソースを食いつぶすなどの挙動がなく、結果として再帰の呼び出し回数に制限がない状態をいう。

また、このような末尾再帰最適化が必ず行われることが保証されている処理系プログラミング言語)を指す。

正格評価関数型プログラミング言語を名乗る言語であれば、ほぼ真正末尾再帰であると思ってよい。ただし正格評価の代表格であるLISPだけは何故か真正末尾再帰ではない。その派生品であるSchemeなどでは真正になっている。

関連項目

参考文献