2012-12-02 6 views
5

Ich habe eine Liste der Zeichencodes in Prolog.Prolog - Liste der CharCodes zu einem String oder Zeichen

Ich möchte sie in Zeichen ändern.

Zum Beispiel

L = "abc" kehrt L = [97,98,99]

Angenommen, ich mit L = [97,98,99]

sowieso L konvertieren zurück in abc Gibt es beginnen, so dass, wenn es eine Methode

convert(L, X) gibt X = abc

zurück 210

Danke.

Antwort

5

L="abc", convert(L, X), X = abc Da ich würde sagen, dass Sie wollen Atom erhalten (siehe Data types description) von Prolog-String. Ich denke, Sie wollen atom_codes/2 oder so ähnlich. Es sollte funktionieren wie L="abc", atom_codes(X, L). nach doc.

Leider habe ich zur Zeit kein SWI-Prolog in meinem System. Aber hier ist YAP, die enthält atom_codes/2

YAP 6.3.2 (x86_64-linux): Sat Sep 1 08:24:15 EEST 2012 
MYDDAS version MYDDAS-0.9.1 
?- L="abc", atom_codes(X,L). 
L = [97,98,99], 
X = abc 

nicht so gut Sie vergessen, dass, wenn Sie auf Ausgabezeichenfolge müssen Sie dies nicht tun müssen, um Atom umgewandelt werden. Siehe format/2 in SWI (oder in YAP)

?- L="abc", format("~s~n", [L]). 
abc 
L = [97,98,99] 
4

Verwenden Sie char_code(?Atom, ?ASCII) in einer Kartenliste.

char_code (? Atom,? ASCII) Konvertieren zwischen Zeichen und ASCII-Wert für ein einzelnes Zeichen. (16)

Source

4

Charaktere vertreten sind als Atome der Länge 1. Sie sie produzieren können:

  • Zum Zeitpunkt lesen double_quotes die Prolog-Flagge durch eine Änderung. Weitere Informationen finden Sie unter this und that Link.

    :- set_prolog_flag(double_quotes, chars). 
    
  • Dynamisch, können Sie atom_codes/2 und atom_chars/2 verwenden. Oder Sie können char_code/2 direkt verwenden.

+0

Ich dachte, dass Atome irgendwie abstrakte Bezeichner sind, die keine Eigenschaften haben, außer dass sie unterschiedlich sind, wenn die Bezeichner unterschiedlich sind. Die Konvertierung in String und zurück ist eher eine Lookup-Assoziation als eine Zerlegung und Assemblierung. Ebenso können einige Prolog-Systeme (zumindest YAP und ein in Frage stehendes) Zeichenfolgen als Liste von Zeichencodes (Zahlen) darstellen. Obwohl ich stimme zu, dass Zahlen als Teilmenge von Atomen betrachtet werden können (im Gegensatz zu list/struct), aber ihre Bezeichner für sichtbare Zeichen sind normalerweise länger als ein Zeichen. – ony

+0

@ony: Auch in YAP können Sie angeben: 'set_prolog_flag (double_quotes, chars)' und dann '" abc "' ist '[a, b, c]'. Im Allgemeinen ist diese Darstellung viel lesbarer als "[97, 98, 99]". – false

+0

@see auch [dies] (http://stackoverflow.com/a/36645725/772868). – false

Verwandte Themen